我有一个已模板化的容器对象。我正在尝试为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
}
有任何想法吗?谢谢!
编辑正在编译的对象也将进入单独的共享对象,不确定是否与此有关。
最佳答案
像任何其他非模板方法一样,特化仍必须遵守一定义规则。内联标记或在源文件(而不是 header )中定义方法主体。