我有一个模板化的容器对象。我正在尝试为float
版本创建专门的构造函数。问题是,当编译器试图编译使用float
版本的第二个对象时,我得到一个multiple definition of
错误。g ++中的模板规范编译错误
注意:整个班级在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
}
任何想法?谢谢!
编辑正在编译的对象也将进入单独的共享对象,不确定是否与它有关。
g ++ 4.0.1也很好。升级? –
目前,我无法这样做,或者相信我会。我被锁定到该版本的这个应用程序。 – steveo225
只是为了测试,我将代码复制到了一个有g ++ 4.1.1的盒子,并得到了相同的错误。 – steveo225