Unresolved external symbol error while using vectors defined in a header file
我是C++新手。我在使用向量时有一个未解决的外部符号错误,不知道出了什么问题,所以我把它复制到这里。
我正在使用MS Visual Studio 2011。准确的误差是:
error LNK2001: unresolved external symbol"class std::vector > abc"
(?abc@@3V?$vector@VmyClass@@V?$allocator@VmyClass@@@std@@@std@@A)
我的班级申报表在我的班级里。H:
1 2 3 4 5 6 7 8 9 10 | #ifndef __MYCLASS__ #define __MYCLASS__ class myClass{ public: int var; myClass(void); myClass (int k); }; #endif |
以及my class.cpp中的类定义:
1 2 3 4 5 6 7 8 | #include"myClass.h" myClass::myClass(void){ var=0; } myClass::myClass (int k){ var=k; } |
头:h:
1 2 3 4 5 6 7 8 9 10 11 | ifndef __HEADER__ #define __HEADER__ #include<iostream> #include<vector> #include"myClass.h" using namespace std; extern std::vector<myClass> abc; #endif |
MCP.CPP:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> #include <vector> #include"myClass.h" #include"header.h" using namespace std; int main(){ abc.push_back(myClass(5)); return 1; } |
这就是我得到未解决的外部符号错误的地方。现在我试着把所有这些放在一个单独的文件中,然后编译好了。
以下文件不包含在上述项目中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include<iostream> #include<vector> #include"myClass.h" using namespace std; class myClass{ public: int var; myClass(void){ var=0; } myClass (int k){ var=k; } }; int main(){ std::vector<myClass> abc; abc.push_back(myClass(5)); return 1; } |
在什么是未定义的引用/未解析的外部符号错误以及如何修复时给出了解决方案?但我不知道如何实现它。
您没有此矢量的定义:
1 | extern std::vector<myClass> abc; |
在全局命名空间范围的一个(并且只有一个)中添加此项您的
1 | std::vector<myClass> abc; |
实际上,考虑到您没有使用来自不同翻译单元(即
另外,避免使用
1 | using namespace std; // THIS IS BAD, DON'T DO IT |
考虑到您已经限定了
您将abc作为局部变量。它应该是一个全局变量。只有这样,extern才能工作。
但是,如果您只想从main()中以局部变量的形式访问它,而不是从另一个编译的cpp文件/对象访问它,那么使用extern是没有意义的。只有当变量是全局变量并且要从另一个编译的cpp/对象访问时,才需要extern。
您声明
尝试在
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> #include <vector> #include"myClass.h" #include"header.h" using namespace std; std::vector<myClass> abc; //^^add this line int main(){ abc.push_back(myClass(5)); return 1; } |
但是,imho在代码中使用extern似乎是无用的。同时,我认为将头文件命名为