列出库中的变量导致运行时错误,原因
List Variable in Library Causes run time error, why?
好的伙计们。 我已经通过移动变量定义修复了错误,但我不明白为什么会有问题。
简化背景:我有一个对象,我想在列表中跟踪该对象的所有实例,所以我只是创建了一个 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("nnLoop the Static Listn");
for (iter = someobject::theStaticList.begin(); iter != someobject::theStaticList.end (); iter++)
(*iter)->func();
return 0;
}
如果将该行放在头文件中,然后将标头包含在两个或多个源文件中,则在包含标头的每个源文件中定义列表对象。
这违反了一个定义规则,因此链接器会在您执行此操作时非常正确地为您提供错误。
您希望在一个(且仅一个)源文件中定义对象。对于库,这应该是库中的某个对象文件,而不是用户的源文件(至少作为一般规则)。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 我的代码中出现运行时错误的可能原因是什么?
- 导致此运行时错误的原因是什么,如何纠正它?
- 运行时错误,无法确定原因
- 以下代码中出现运行时错误的原因是什么
- 无法弄清楚为什么我的程序在 spoj 上给出运行时错误而不是在 ideone 上给出运行时错误的原因
- 导致以下程序中出现运行时错误的原因
- 列出库中的变量导致运行时错误,原因
- 在此代码中导致运行时错误的原因