模板类构造函数的定义是不是要和申明放在一个文件?该怎么处理
模板类构造函数的定义是不是要和申明放在一个文件?
遇到了一个头疼的问题,请大家帮忙解决。
//: A.h
#ifndef A_H
#define A_H
template<class T>
class A{
public:
A();
~A();
};
#endif //A_H ///:~
--------------------------------------------------
// : A.cpp
#include"A.h"
template<class T>
A<T>::A(){
}
template<class T>
A<T>::~A(){
}
-------------------------------------------------
// : main.cpp
#include<iostream>
#include"A.h"
int main(){
A<int> a;
}
-------------------------------------------------
运行结果出错:g++ -o main A.h A.cpp main.cpp
/tmp/ccqrEnAf.o: In function `main':
main.cpp:(.text+0x11): undefined reference to `A<int>::A()'
main.cpp:(.text+0x1d): undefined reference to `A<int>::~A()'
collect2: ld returned 1 exit status
如果将A的定义放在A.h里面,也就是放在类里面,编译就没有问题;
如果将A的定义放在A.cpp里面就会出错。
大家帮我看看是什么原因?
我用的是g++ 4.6.3
------解决方案--------------------
模板类及函数的实现要放到.h中,不支持放到.cpp文件中
------解决方案--------------------
昨天刚刚看到这个问题,类模板的声明和定义不可以分开放。。。。
遇到了一个头疼的问题,请大家帮忙解决。
//: A.h
#ifndef A_H
#define A_H
template<class T>
class A{
public:
A();
~A();
};
#endif //A_H ///:~
--------------------------------------------------
// : A.cpp
#include"A.h"
template<class T>
A<T>::A(){
}
template<class T>
A<T>::~A(){
}
-------------------------------------------------
// : main.cpp
#include<iostream>
#include"A.h"
int main(){
A<int> a;
}
-------------------------------------------------
运行结果出错:g++ -o main A.h A.cpp main.cpp
/tmp/ccqrEnAf.o: In function `main':
main.cpp:(.text+0x11): undefined reference to `A<int>::A()'
main.cpp:(.text+0x1d): undefined reference to `A<int>::~A()'
collect2: ld returned 1 exit status
如果将A的定义放在A.h里面,也就是放在类里面,编译就没有问题;
如果将A的定义放在A.cpp里面就会出错。
大家帮我看看是什么原因?
我用的是g++ 4.6.3
------解决方案--------------------
模板类及函数的实现要放到.h中,不支持放到.cpp文件中
------解决方案--------------------
昨天刚刚看到这个问题,类模板的声明和定义不可以分开放。。。。