Eclipse未定义引用

时间:2011-06-25 14:19:10

标签: eclipse mingw

我正在使用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()'

2 个答案:

答案 0 :(得分:1)

这是链接器错误。我不是Eclipse专家,但你必须告诉它以某种方式将Stack.o添加到链接命令 如果包含Stack.cpp而不是Stack.h,则cpp-file中的实现会在编译之前由预处理器包含到main.cpp中,因此链接阶段没有对外部函数的未解析引用。

答案 1 :(得分:0)

我的不好,那是因为模板!当您使用模板时,所有代码(包括函数的实现)必须位于头文件中,或者您必须为将要使用模板函数的每种类型编写原型。我忘记了使用模板与通常的功能不一样:(