【发布时间】:2011-08-05 12:48:38
【问题描述】:
我有一个模板化的容器对象。我正在尝试为float 版本制作一个专门的构造函数。问题是,当编译器尝试编译使用float 版本的第二个对象时,我收到multiple definition of 错误。
注意:h 文件中的整个类。该文件包含一个定义(#ifndef、#define 和 #endif)。 g++ 版本 3.4.6。这可以与其他编译器一起编译,例如英特尔的 icc。
代码类似如下:
template <typename T>
class Container {
public:
Container();
virtual ~Container() {}
private:
std::vector<T> data;
// other members
};
template <> Container<float>::Container() {
// do something special
}
template <typename T> Container<T>::Container() {
// do default initialization
}
有什么想法吗?谢谢!
EDIT正在编译的对象也将进入单独的共享对象,不确定是否与它有关。
【问题讨论】:
-
g++ 4.0.1 也可以。升级?
-
目前,我无法这样做,或者相信我会这样做。我被锁定在这个应用程序的那个版本中。
-
只是为了测试,我把代码复制到一个有g++ 4.1.1的盒子里,得到了同样的错误。
标签: c++ templates compiler-errors