此问题在此处已有答案:
Undefined reference to static class member(9个答案)
四个月前关门了。
此帖子已在2天前编辑并提交审核,无法重新打开帖子:
原始关闭原因未解决
- 这个问题在概念上是重复的,但是错误的表达方式不同。未解析的符号应该被理解为未定义的引用。如果你是C++的新手,请花点时间阅读我的代码生成的错误。*
我正在学习一门C++和OOP课程,我需要一些帮助来了解我做错了什么以及我可以做些什么来纠正它。我有一个代码框架,在那里我不能通过将类成员从静态改为非静态来更改它们。在我当前的讲义中,我需要在第二个类中创建第一个类的对象。并调用第一个类中的一个方法。我不能将类成员从private移动到public或public移动到private,也不能将它们从static更改为non-static。我的目标是在第二个类中编写方法,使用第一个类中的setter和getter,使用第二个类别中的对象,并在int main()中呼叫第二个类别中的方法。
下面是我在尝试我所描述的内容时所写的基本想法。
#include <iostream>
using namespace std;
class foo
{
private:
static string goo;
static long int doo;
public:
static void setGoo(string gooString)
{
goo = gooString;
}
static void setDoo(long int dooLongInt)
{
doo = dooLongInt;
}
static string getGoo()
{
return goo;
}
static long int getDoo()
{
return doo;
}
};
class moo
{
private:
foo fooObj;
public:
void setGoo(string gooString)
{
fooObj.setGoo(gooString);
}
void setDoo(long int dooLongInt)
{
fooObj.setDoo(dooLongInt);
}
string getGoo()
{
return fooObj.getGoo();
}
long int getDoo()
{
return fooObj.getDoo();
}
};
int main()
{
moo mainMoo;
string text = "Text";
mainMoo.setGoo(text);
mainMoo.setDoo(123);
cout << mainMoo.getGoo();
cout << mainMoo.getDoo();
return 0;
};
当我编译它时,我得到这些错误。
1>Source.obj : error LNK2001: unresolved external symbol "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > foo::goo" (?goo@foo@@0V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A)
1>Source.obj : error LNK2001: unresolved external symbol "private: static long foo::doo" (?doo@foo@@0JA)
1>C:\Users\ipyra\OneDrive\Documents\edx hands-on projects\Static class private member initialization\x64\Debug\Static class private member initialization.exe : fatal error LNK1120: 2 unresolved externals
1条答案
按热度按时间vltsax251#
类的静态成员需要在类外初始化,这就是链接错误的原因。
在C++17中使用
inline
关键字,我们可以在类内部定义静态成员。http://en.cppreference.com/w/cpp/language/static另一个类似的问题How to initialize private static members in C++?