2011-06-25 68 views
1

我正在使用Eclipse和MinGW。对于我在h文件中编写的所有文件,我有undefined reference to错误,我在cpp文件中包含主要位置。我创建一个空的项目,并再次同样的事情(Eclipse未定义的参考

的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 inplements一切,如果我有不是h-file,而是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

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

1

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

+0

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