VS2017
有一段时间没写c++了,这次用vs2017写c++报这个错又有种熟悉的味道。
原因:c++在写模版函数时(template<class T>之类的),头文件不能与cpp文件分离。这就意味者,你头文件定义的含模版的地方必须在头文件中实现,没用模版定义的地方可以放在cpp中实现
比如这样:
class Caculator
{
private:int* data = NULL;int dataSIze = 0;int dataIndex = 0;char* operators = NULL;int operatorSize = 0;int operIndex = 0;long t_result = 0;
public:Caculator();Caculator(const Caculator& caculator);~Caculator();template<int N, int M>void init(int(&datas)[N], char(&_operators)[M]) {data = datas;dataSIze = N;operators = _operators;operatorSize = M;}long result();template<int N, int M>long result(int(&datas)[N], char(&_operators)[M]) {init(datas, _operators);return result();}long caculate(int a, char _operator, int b);
};#endif
VSCode
不过值得一提的是,在VsCode里有模版的地方也可以不分离,即你这么写,并全部在cpp中实现也是没问题的
但相应地(就我个人情况),在main.cpp 中include的时候,就要写成#include"caculator.cpp" 而不是 #include"caculator.h",
我也不知道为什么,可能是因为vscode没有进行相应的配置,你include头文件他似乎找不到对应的cpp文件,从而导致报错
no refererence 空引用错误