请考虑以下代码:
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
}
我收到以下错误
"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"
(?m_stCityCode@Automobile@@2V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) myPro C:\Users\zhivko.rusev\Documents\Visual
Studio 2015\Projects\myPro\myPro\Calls.obj 1 "
我很感激解决这个问题的每一个帮助。提前谢谢!
答案 0 :(得分:0)
需要定义静态成员。错误消息是链接器告诉您它不是的方式。您的代码声明了静态成员,但没有定义它。
要在单个编译单元(即非标头源文件)中定义它,只需在包含头文件后在文件范围添加一行
#include "Automobile.h"
std::string Automobile::m_stCityCode = ""; // change the initialiser to whatever suits
只在一个编译单元中执行此操作。一个是定义符号的必要条件。多个定义(例如,在项目中的多个源文件中)将导致链接器抱怨多次定义符号。
除了您所询问的内容之外,您的代码中还存在其他问题,但我认为这只会反映您已将信息遗漏。
答案 1 :(得分:-1)
您需要在.cpp文件中初始化静态成员,就像为静态方法放置定义一样。
string Automobile::m_stCityCode = "12345";
此外,您可以在头文件中初始化,但如果在链接阶段的几个文件中包含您的标题,您将获得多个定义。