Ich schrieb Code unten, aber immer FehlermeldungWie man keinen Argumentkonstruktor in C++ aufruft?
Aufruf überladener 'Shape()' mehrdeutig ist
Wie kann ich ein, sehen gibt es kein Argument Konstruktor dann warum I bekomme ich Mehrdeutigkeit Fehlermeldung für Shape() Konstruktor, und wie kann es gelöst werden? Ich kann sehen, es funktioniert für Objekt s2
und s3
, aber nicht für keinen Argument-Konstruktor.
Wenn ich erklärt s1
wie folgt:
Shape s1();
// statt Shape s1
Dann erhalte ich für print
Methode der Shape
folgende Meldung. Warum? und was von non-class type
gemeint?
Anfrage Mitglied 'Drucken' in 's1', die von Nicht-Klasse-Typ 'Shape()'
class Shape {
int j;
public:
int i;
const char* const c;
double print() const {
printf("Value of i is %d, j is %d and c is %s\n", i, j, c);
return 0;
}
Shape() :
i(10), j(0), c("Some string") {
}
Shape(int i = 10) :
i(10), j(10), c("Some String") {
this->i = i;
}
Shape(char* c) :
i(), j(), c(strcpy(new char[strlen(c)], c)) {
}
};
int main() {
Shape s1; // call of overloaded 'Shape()' is ambiguous
Shape* s2 = new Shape(1);
Shape s3("Some string");
s1.print(); // When using Shape s1() I am getting request for
// member 'print' in 's1', which is of non-class type 'Shape()'
return 0;
}
Irgendeine Idee, was das bedeutet? 'Shape (int i = 10)' – juanchopanza
Sie können dies lesen: http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-aa-work – Rakete1111
@juanchopanza - es ist ein Argument mit einem Standardwert. Wenn kein Argument angegeben wird, wird davon ausgegangen, dass 10 bestanden wurde. Aber natürlich nicht hier, denn er hatte auch einen Konstruktor ohne Argumente. – yakobom