我正在使用Eclipse和MinGW。我在h文件中写的所有内容都有undefined reference to
错误,我确实包含在主要位置的cpp文件中。我创建了一个空项目,并再次创建同样的东西(
的main.cpp
#include <iostream>
#include "Stack.h"
using namespace std;
int main(){
Stack<int> stack(10);
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
stack.h
#ifndef STACK_H_
#define STACK_H_
template <class T>
class Stack{
private:
struct StackEl;
StackEl *top;
public:
Stack();
Stack(T el);
~Stack();
void Push(const T& el);
T Pop();
};
#endif /* STACK_H_ */
和stack.cpp补充了stack.h中的所有内容 如果我不包含h文件,但cpp - 一切正常。请帮忙!
我有以下错误
D:/Workspacee/Stack2/Debug/../src/Stack2.cpp:16: undefined reference to `Stack<int>::Stack(int)'
D:/Workspacee/Stack2/Debug/../src/Stack2.cpp:18: undefined reference to `Stack<int>::~Stack()'
D:/Workspacee/Stack2/Debug/../src/Stack2.cpp:18: undefined reference to `Stack<int>::~Stack()'
答案 0 :(得分:1)
这是链接器错误。我不是Eclipse专家,但你必须告诉它以某种方式将Stack.o
添加到链接命令
如果包含Stack.cpp
而不是Stack.h
,则cpp-file中的实现会在编译之前由预处理器包含到main.cpp中,因此链接阶段没有对外部函数的未解析引用。
答案 1 :(得分:0)
我的不好,那是因为模板!当您使用模板时,所有代码(包括函数的实现)必须位于头文件中,或者您必须为将要使用模板函数的每种类型编写原型。我忘记了使用模板与通常的功能不一样:(