+ -
当前位置:首页 → 问答吧 → 刚学习C++模板的,遇到一个不解的问题

刚学习C++模板的,遇到一个不解的问题

时间:2010-08-29

来源:互联网

///--------aa.h---------
#ifndef _A_H_
#define _A_H_
class A
{
public:
        A();
        virtual ~A();
        int open();

};

template <class T>
class B :public A
{
public:
        B();
        virtual ~B();
        int open(char *p,int c);
};

#endif


///-----------aa.cpp-------------------------

#include "aa.h"

A::A()
{
}
A::~A()
{
}
int A:pen()
{
        return 0;
}

template <class T>
B<T>::B()
{
}
template <class T>
B<T>::~B()
{
}
template <class T>
int B<T>:pen(char *p,int c)
{
        printf("%s:%d\n",p,c);
        return 0;
}

//------------------main.cpp-----------------------------
#include "aa.h"

int main()
{
        B<int> b;
        b.open("dddd",3);

        return 0;
}


//------编译------------
g++ aa.cpp main.cpp

/tmp/ccpB4mZP.o(.text+0x16a): In function `main':
: undefined reference to `B<int>::B[in-charge]()'
/tmp/ccpB4mZP.o(.text+0x18e): In function `main':
: undefined reference to `B<int>::~B [in-charge]()'
collect2: ld returned 1 exit status


我把函数的实现放到类里面都没问题,不知道是不是少了什么啊?

作者: hsd325   发布时间: 2010-08-29

如果把构造函数和析构函数的实现放到类定义的内部则报这样的错误

/tmp/cc6XzWMp.o(.text+0x180): In function `main':
: undefined reference to `B<int>:pen(char*, int)'
collect2: ld returned 1 exit status

作者: hsd325   发布时间: 2010-08-29

模板不能分离的,都放在.h吧

作者: hellioncu   发布时间: 2010-08-29

回复 hellioncu


   哦,谢谢啦

作者: hsd325   发布时间: 2010-08-29