2016-05-20 12 views
0

Ich bin ein Anfänger in c++, ich weiß, es gibt viele ähnliche Fragen, aber leider hat mir nicht geholfen, dieses Problem zu lösen (was ist ein konzeptioneller missverstanden, denke ich)keine übereinstimmende Funktion für Aufruf zum Fehler in C++

so habe ich diese constructor

Field::Field(const Position &posG, const Position &posC) { 
    //... 
} 

und ich bin die Schaffung eines Field wie

folgt
// Create positions 
Position posG, posC; 
posG.x = 3; 
posG.y = 3; 
posC.x = 4; 
posC.y = 4; 

// Create pointers to positions 
const Position *pPosC(&posC); 
const Position *pPosG(&posG); 

// Create field 
Field field (pPosG, pPosC); 

Wo Position i s

struct Position { 
    int x; 
    int y; 
}; 

Dann ich erhalte diese Ausnahme:

main.cpp:27:30: error: no matching function for call to ‘Field::Field(const Position*&, const Position*&)’ 
    Field Field (pPosG, pPosC); 

In file included from main.cpp:2:0: 

Hilfe? Grüße

+0

Verwenden 'Feldfeld (* pPosG, * pPosC);' oder 'Feldfeld (posG, PosC);' statt. – skypjack

+0

// Feld erstellen Feldfeld (* pPosG, * pPosC); – systemcpro

Antwort

3
Field(const Position &posG, const Position &posC); 
        ^^^^^     ^^^^^^ 

Das sind Referenzen. Also, wenn Sie versuchen, Zeiger übergeben

Field field (pPosG, pPosC); 
      ^^^^^ ^^^^ 
      pointer pointer 

Es kann nicht kompilieren.

entweder einen Konstruktor Referenzzeiger akzeptieren (const Position *&posG) oder den Wert der Zeiger übergeben (*pPosG) oder nur die Werte übergeben direkt (posG).

+1

'posG' und' posC' sind in Ordnung. Siehe "Position posG, posC;". – skypjack

+0

@skypjack Wir sprechen nicht über das gleiche 'posG' und' posC' :) Aber ich sehe deinen Punkt, thx – Rakete1111

+0

@skypjack Ich tat, du hast Recht – Rakete1111

2

Ihr Konstruktor erwartet Referenzen, keine Zeiger.

Als Nebenbemerkung ist nicht klar, warum Sie Referenzen oder Zeiger verwenden.

3

Wenn Sie ein Konstruktor als

definiert haben
Field(const Position &posG, const Posicion &posC); 

können Sie Objekte vom Typ Position als Argumente, um es verwenden, keine Zeiger auf Position

Sie verwenden können.

Field field(posG, posC); 

oder

Field field(*pPosG, *pPosC); 
0

Sie ein constructor definieren müssen, verwenden Sie dann von const Position *pPosC(&posC); Ausdruck.

müssen Sie constructor-copy wie folgt definieren:

struct Posicion { 
public : 
    Position(const Position &pos)   // constructor copy 
    { 
     // some code here 
     x = pos.x; 
     y = pos.y; 
    } 

    int x; 
    int y; 
}; 
Verwandte Themen