c++ Aufruf Konstruktor in einem anderen Konstruktor der gleichen Klasse
Bin ich mit dem MinGW-w64 mit 4.8.1 (mit -std=c++11) und der Versuch zu nennen, einen Konstruktor meiner Klasse in einen anderen Konstruktor der gleichen Klasse. Leider habe ich nicht kompilieren, den folgenden code ein.
A::A(const char *pc) {
A(string(pc));
}
A::A(string s) {
vector<string> tmpVector;
tmpVector.push_back(s);
A(tmpVector);
}
//Constructor
A::A(vector<string> filePathVector) {
}
Unten ist der Fehler, der GCC beschwert sich über.
In file included from ../parser/nsn/parser.h:37:0,
from main.cpp:2:
../parser/nsn/parserimp.h: In constructor 'A::A(std::string)':
../parser/nsn/parserimp.h:522:29: error: conflicting declaration 'A tmpVector'
A(tmpVector);
^
../parser/nsn/parserimp.h:520:17: error: 'tmpVector' has a previous declaration as 'std::vector<std::basic_string<char> > tmpVector'
vector<string> tmpVector;
Hab ich überlesen Delegierten Konstruktor-Konzept in C++11, aber ich bin nicht sicher, ob dies ist, was ich bin nach....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese
ist die gleiche wie diese
Dies erklärt die Fehler. Es sieht aus wie Sie anrufen möchten, einen anderen Konstruktor zu initialisieren, das gleiche Objekt. In diesem Fall können Sie delegierende Konstruktoren:
Beachten Sie, dass dies eine der neuesten C++11-features für die Sprache Hinzugefügt werden, um die meisten gängigen Compiler, so kann es nicht funktionieren, wenn Ihr compiler nicht die volle C++11 Sprach-Unterstützung.
A(tmpVector);
das gleiche wieA tmpVector;
?()
sind überflüssig. Siehe dieses Beispiel.void f(int s);
ist das gleiche wievoid f(int (s));
, dies ist die Quelle von viele die meisten-leidige-parse FällenA(tmpVector);
==A (tmpVector);
==A tmpVector;
?A
ist ein typename dannA x;
undA (x);
deklariert eine variablex
TypA
. wieA (((x)));
etc.Danke an alle, dies ist der Letzte code, der kompiliert wurde reibungslos durch die Verwendung von mingw-w64 mit GCC 4.8.1