QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1782|回复: 3

c++template求助!

[复制链接]
发表于 2006-11-22 16:28:10 | 显示全部楼层 |阅读模式
各位大侠:
     小弟最近正在学习c++,其中template部分写了个程序,可是老是出错,不知为什么?整整搞了一天,只好向各位请教了,谢谢!
Node.h文件
[code:1]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
[/code:1]
Node.cpp文件
[code:1]#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;
}
[/code:1]
main.cpp文件
[code:1]#include <iostream>
#include "node.h"
#include <cstdlib>

int main()
{
        std::cout << "Hello world!" << std::endl;
        Node<int> intnode(5);
        intnode.Print();
        return 0;
}
[/code:1]
gcc编译出错:
undefine reference to “Node<int>::Node(int)”

新手求助,谢谢!
发表于 2006-11-22 16:43:35 | 显示全部楼层
去掉构造函数形参上的const试试
回复

使用道具 举报

发表于 2006-11-22 16:56:35 | 显示全部楼层
原因非常的简单,template现在不支持没有具现化方式的编译。就好像标准函数库,提供的都是.h文件,我们在编译自己的代码的时候,这些.h文件都会做为我们源代码的一部分包含进来,共同参与编译。

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

使用道具 举报

 楼主| 发表于 2006-11-22 17:14:47 | 显示全部楼层
[quote:607bb5cc08="hanhiver"]原因非常的简单,template现在不支持没有具现化方式的编译。就好像标准函数库,提供的都是.h文件,我们在编译自己的代码的时候,这些.h文件都会做为我们源代码的一部分包含进来,共同参与编译。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 04:34 , Processed in 0.035782 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表