2017-11-30 3 views
0

Betrachten Sie den folgenden Code ein:Fehler bei der statischen Methode c Aufruf ++

Automobile.h

class Automobile 
{ 

    static string m_stCityCode; 

    static bool CheckCityCode(const Automobile& obj); 

}; 

Automobile.cpp

bool Automobile::CheckCityCode(const Automobile& obj) 
{ 

    return m_stCityCode == obj.m_stCityCode; 
} 



int main() 
{ 

//do something 

} 

bekomme ich folgende Fehler

"Severity Code Description Project File Line Suppression State 
Error LNK2001 unresolved external symbol "public: static class 
std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> > Automobile::m_stCityCode" 

([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A) myPro C:\Users\zhivko.rusev\Documents\Visual 
Studio 2015\Projects\myPro\myPro\Calls.obj 1 " 

Ich würde mich über jede Hilfe freuen Dieses Problem lösen. Danke im Voraus!

+0

Sie müssen Ihr statisches Element irgendwo definieren. Es sollte in Ihrem Lieblings C++ Buch erwähnt werden. (Ihr Vergleich ist übrigens immer richtig.) – molbdnilo

Antwort

0

Das statische Element muss definiert werden. Die Fehlermeldung ist die Art und Weise, wie der Linker Ihnen sagt, dass dies nicht der Fall ist. Ihr Code deklariert das statische Element, definiert es jedoch nicht.

es zu definieren, in einer einzigen Übersetzungseinheit (das heißt eine nicht-Header-Quelldatei) einfach eine Zeile in Dateigültigkeitsbereich hinzufügen, nachdem

die Header-Datei einschließlich
#include "Automobile.h" 
std::string Automobile::m_stCityCode = ""; // change the initialiser to whatever suits 

dies genau Einheit einer Zusammenstellung in Do. Eine ist notwendig, um die Symbole zu definieren. Mehrere Definitionen (z. B. in mehreren Quelldateien in Ihrem Projekt) führen dazu, dass der Linker sich darüber beschweren muss, dass Symbole mehrfach definiert werden.

Es gibt andere Probleme in Ihrem Code, wie gezeigt, über das, was Sie gefragt haben, aber ich nehme an, dass nur reflektiert, dass Sie Informationen verlassen haben.

-1

Sie müssen Ihr statisches Element in der .cpp-Datei initialisieren, genauso wie Sie die Definition für Ihre statische Methode festlegen.

string Automobile::m_stCityCode = "12345";

Sie können auch in Header-Datei initialisieren, aber Sie werden mehr Definition, wenn schließen Sie über die Verknüpfung Phase in mehr Header-Dateien.

Verwandte Themen