superhxl 发表于 2006-11-22 16:28:10

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)”
新手求助,谢谢!

bluesky000 发表于 2006-11-22 16:43:35

去掉构造函数形参上的const试试

hanhiver 发表于 2006-11-22 16:56:35

原因非常的简单,template现在不支持没有具现化方式的编译。就好像标准函数库,提供的都是.h文件,我们在编译自己的代码的时候,这些.h文件都会做为我们源代码的一部分包含进来,共同参与编译。

楼主可以尝试一下,你将node.h, node.cpp和main.cpp三个文件放到同一个文件中,然后再编译就能够顺利的通过并的到正确的答案。

superhxl 发表于 2006-11-22 17:14:47

原因非常的简单,template现在不支持没有具现化方式的编译。就好像标准函数库,提供的都是.h文件,我们在编译自己的代码的时候,这些.h文件都会做为我们源代码的一部分包含进来,共同参与编译。

楼主可以尝试一下,你将node.h, node.cpp和main.cpp三个文件放到同一个文件中,然后再编译就能够顺利的通过并的到正确的答案。多谢,hanhiver果然高人也!按照你的意见,将三个文件放在一起,果然搞定了! :D:D:D
ps:不过,c++这样就不是很方便啦,一个主文件岂不是要搞得很大!我只是知道一点皮毛的皮毛的皮毛,也许有更好的解决方法,呵呵!Any way,感谢回帖的两位!
页: [1]
查看完整版本: c++template求助!