好的,伙计们。我已经通过移动变量定义修复了错误,但我不明白为什么会出现问题。
简化背景:我有一个对象,我想在一个列表中跟踪该对象的所有实例,所以我只是创建了一个 List<> 类的静态成员。下面是一个简单的表示,让我可以使用它。如果我在静态库中将该行标记为“此行”。我收到运行时错误。该对象在头文件中定义,并且在两个地方都是相同的头文件。如果我将“这一行”移动到最终应用程序中的代码并且它可以工作......为什么?我只是不明白为什么它不同。
#include "stdafx.h"
#include <list>
using namespace std;
class someobject
{
public:
someobject()
{
// do some stuff.
theStaticList.push_back(this);
}
void func()
{
printf("Made it!!\n");
}
static list<someobject*> theStaticList;
};
list<someobject*> someobject::theStaticList; //*** This line
someobject global;
int main()
{
someobject initial;
initial.func();
global.func();
list<someobject*>::iterator iter;
printf("\n\nLoop the Static List\n");
for (iter = someobject::theStaticList.begin(); iter != someobject::theStaticList.end (); iter++)
(*iter)->func();
return 0;
}