我有一个已模板化的容器对象。我正在尝试为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 )中定义方法主体。

09-09 23:46
查看更多