c++template求助!
各位大侠:小弟最近正在学习c++,其中template部分写了个程序,可是老是出错,不知为什么?整整搞了一天,只好向各位请教了,谢谢!
Node.h文件
ifndef NODE_H
#define NODE_H
#include <cstdlib>
template<class T>
class Node
{
public:
//data为公有成员
T data;
//构造函数
Node(const T item);
~Node();
void Print();
protected:
private:
//指向下一个节点的指针
Node<T> *next_ptr;
};
#endif // NODE_H
Node.cpp文件
#include "node.h"
#include <iostream>
template <class T>
Node<T>::Node(const T item)
{
//ctor
data=item;
next_ptr=NULL;
}
template<class T>
Node<T>::~Node()
{
//dtor
}
template <class T>
void Node<T>::Print()
{
std::cout<<data;
}
main.cpp文件
#include <iostream>
#include "node.h"
#include <cstdlib>
int main()
{
std::cout << "Hello world!" << std::endl;
Node<int> intnode(5);
intnode.Print();
return 0;
}
gcc编译出错:
undefine reference to “Node<int>::Node(int)”
新手求助,谢谢! 去掉构造函数形参上的const试试 原因非常的简单,template现在不支持没有具现化方式的编译。就好像标准函数库,提供的都是.h文件,我们在编译自己的代码的时候,这些.h文件都会做为我们源代码的一部分包含进来,共同参与编译。
楼主可以尝试一下,你将node.h, node.cpp和main.cpp三个文件放到同一个文件中,然后再编译就能够顺利的通过并的到正确的答案。 原因非常的简单,template现在不支持没有具现化方式的编译。就好像标准函数库,提供的都是.h文件,我们在编译自己的代码的时候,这些.h文件都会做为我们源代码的一部分包含进来,共同参与编译。
楼主可以尝试一下,你将node.h, node.cpp和main.cpp三个文件放到同一个文件中,然后再编译就能够顺利的通过并的到正确的答案。多谢,hanhiver果然高人也!按照你的意见,将三个文件放在一起,果然搞定了! :D:D:D
ps:不过,c++这样就不是很方便啦,一个主文件岂不是要搞得很大!我只是知道一点皮毛的皮毛的皮毛,也许有更好的解决方法,呵呵!Any way,感谢回帖的两位!
页:
[1]