重载operator<<<<<<<用于模板类

时间:2013-03-14 10:58:39

标签: c++ templates

我使用visual c ++。 我有一个模板类,我想为它添加重叠操作 我在下面阻止了它 在头文件

    template <class T> class QuantityT;
    template <class T>
    inline std::ostream & operator<< (std::ostream & os,const QuantityT<T> &quantity);


    template <class T>
    class QuantityT{

            T quantity_;
            template<class T> friend inline std::ostream & operator<< <T>(std::ostream & os,const QuantityT<T> &quantity);
    };

在源文件中

    template <class T>
    inline std::ostream & operator<< (std::ostream & os,const QuantityT<T> &quantity){
    }

但是我收到链接错误:

  

main.obj:错误LNK2019:未解析的外部符号“类   std :: basic_ostream&gt; &安培; __cdecl   operator&lt;&lt;(class std :: basic_ostream&gt;&amp;,class QuantityT const&amp;)“   (?? $?6K @@ YAAAV?$ basic_ostream @ DU?$ char_traits @ d @ STD @@@ STD @@ @ AAV01 ABV?$ QuantityT @ķ@@@ Z)   在函数“public:virtual void __thiscall中引用   log :: print(class std :: basic_ostream

     
    

&amp;)const“(?print @ log @@ UBEXAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ std @@@ Z

  

我该如何解决?

1 个答案:

答案 0 :(得分:3)

尝试将源文件的内容放入头文件中:

template <class T>
inline std::ostream & operator<< (std::ostream & os,const QuantityT<T> &quantity){
}

请查看this question以获取更多信息。