Konstruktor mit this aufrufen funktioniert nicht

Catscrash

Mitglied
Hi,

Ich versuche erst zu beschreiben was ich möchte, und dann wie ich es probiert habe ;-)

Ziel:

Eine Klasse A hat einige public Variablen und soll einen Vektor aus sagen wir 500 Elementen der Klasse B enthalten.
Die Klasse B besteht aus einigen Variablen.
Im Konstruktor der Klasse A möchte ich den Vektor aufbauen, jedes Vektorelement soll dann automatisch befüllt werden. Dafür wollte ich den Konstruktor der Klasse B benutzen. Leider benötige ich zum befüllen dieser Werte einige der Variablen aus A.

Versuch:
header-Datei:

Code:
class A
{
  public:
    A(); //ctor
    double x;
    double y;
    double z;

  private:
    class B
    {
      public:
        B(){}; //Default C-tor
        B(int i, const A &parentA);
        virtual ~B();
        const A *parentAPt;
        double w;
        double v;
        double u;
      private:
        //more functions
    };
    
     vector<B> myBVector;
     //more functions
}

cpp-Datei:
Code:
A::B::B(int i,const A &parentA)
try: parentAPt(&parentA)
{
//calculate some stuff with the help of vars from A
u = i * 5 * parentAPt->x;
}
catch (string text)
{
//some catching...
}

A::A()
{
  for (int i=0;i<500;i++)
    myBVector.push_back(B(i,this));
}


Compilerfehlermeldung mit zum Forenpost angepassten Zeilennummern:
Code:
cpp-file Line 15 error: no matching function for call to 'A::B::B(int&,A* const)'
cpp-file Line 1 note: candidates are: A::B::B(int, const A&)
h-file Line 13  note:                         A:B:B()
h-file Line 11 note:                         A:B:B(const A::B&)

ist das mit dem Konstruktoraufruf mit "this" grundsätzlich nicht möglich, muss ich also alle nötigen Variablen dem Konstruktor im Aufruf übergeben, oder ist nur etwas an meinem Aufruf falsch?

Danke für Hilfe!
 
Hallo,

wie schon aus der Fehlermeldung ersichtlich ist, passt die Signatur des Konstruktors nicht zu seiner Verwendung.
Du müsstest im Konstruktor von A schreiben:
C++:
myBVector.push_back(B(i, *this));
Gruß
MCoder
 
Zurück