调用静态方法c ++时出错

时间:2017-11-30 09:09:56

标签: function methods static boolean

请考虑以下代码:

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   "

我很感激解决这个问题的每一个帮助。提前谢谢!

2 个答案:

答案 0 :(得分:0)

需要定义静态成员。错误消息是链接器告诉您它不是的方式。您的代码声明了静态成员,但没有定义它。

要在单个编译单元(即非标头源文件)中定义它,只需在包含头文件后在文件范围添加一行

#include "Automobile.h"
std::string Automobile::m_stCityCode = "";   // change the initialiser to whatever suits

只在一个编译单元中执行此操作。一个是定义符号的必要条件。多个定义(例如,在项目中的多个源文件中)将导致链接器抱怨多次定义符号。

除了您所询问的内容之外,您的代码中还存在其他问题,但我认为这只会反映您已将信息遗漏。

答案 1 :(得分:-1)

您需要在.cpp文件中初始化静态成员,就像为静态方法放置定义一样。

string Automobile::m_stCityCode = "12345";

此外,您可以在头文件中初始化,但如果在链接阶段的几个文件中包含您的标题,您将获得多个定义。