万能的坛友,请为小弟指点迷津

C++语言 码拜 9年前 (2016-05-02) 896次浏览
   本人有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 个无法解析的外部命令
解决方案

20

Func_3.cpp 添加
vector<int> Func_3::vec_1;

10

楼上正解,无法解析的外部符号是指一个符号声明了但是没有定义,类的静态成员变量在类内的部分输入声明,在类外必须定义一下才能用

20

这是原因是被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside   The   C++   Object   Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,假如你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?莫非类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗?
所以本人的朋友,为了满足C++的static语意,static成员一定要在类外初始化!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明万能的坛友,请为小弟指点迷津
喜欢 (0)
[1034331897@qq.com]
分享 (0)