本人有vs2013编写c++,出现的错误为:
1>07-13-04.obj : error LNK2001: 无法解析的外部符号 “private: static class std::vector<int,class std::allocator<int> > Func_3::vec_1″ (?vec_1@Func_3@@0V?$vector@HV?$allocator@H@std@@@std@@A)
1>C:\Users\kangdi\Desktop\新建文件夹\Project4\Debug\Project4.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>07-13-04.obj : error LNK2001: 无法解析的外部符号 “private: static class std::vector<int,class std::allocator<int> > Func_3::vec_1″ (?vec_1@Func_3@@0V?$vector@HV?$allocator@H@std@@@std@@A)
1>C:\Users\kangdi\Desktop\新建文件夹\Project4\Debug\Project4.exe : fatal error LNK1120: 1 个无法解析的外部命令
解决方案
20
Func_3.cpp 添加
vector<int> Func_3::vec_1;
vector<int> Func_3::vec_1;
10
楼上正解,无法解析的外部符号是指一个符号声明了但是没有定义,类的静态成员变量在类内的部分输入声明,在类外必须定义一下才能用
20
这是原因是被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside The C++ Object Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,假如你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?莫非类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗?
所以本人的朋友,为了满足C++的static语意,static成员一定要在类外初始化!
所以本人的朋友,为了满足C++的static语意,static成员一定要在类外初始化!