C++静态成员函数调用类内static map报undefined symbol链接错误如何解决
问题原因
C++类内部的static成员仅属于声明,没有分配实际内存空间,必须在类外部完成定义,链接器才能找到对应的符号实体,否则就会抛出undefined symbol类型的链接错误。
解决方案
分两种兼容不同C++标准的实现方式:
- 兼容C11/C14等旧标准:在类定义的外部、全局作用域下添加静态成员的定义代码即可,示例如下:
// 类定义外的全局位置添加此行 map<int, int> Solution::aaa;
- C++17及更高版本:可以直接修改类内的静态成员声明,添加
inline关键字,无需额外在类外定义:
// 将类内的原声明修改为如下格式 static inline map<int,int> aaa;
注意事项
静态成员的生命周期贯穿程序运行全程,多次调用frequencySort函数时,上次统计的数据会残留在aaa中,建议在函数开头添加aaa.clear();清空历史数据,避免逻辑错误。
内容的提问来源于stack exchange,提问作者Deng
相关产品推荐
相关产品推荐

