我試圖爲類模板重載< <運算符,但編譯器給我一個鏈接器錯誤。目標是能夠向std :: cout發送一個取消引用的基類指針,以便派生的運算符< <被調用。模板和overloadering操作符<<
這可能嗎?
class IBase
{
public:
IBase() {};
virtual ~IBase() {};
};
template <typename T>
class Derived
: public IBase
{
public:
Derived(T data);
friend std::ostream& operator<<(std::ostream& os, const Derived<T>& dt);
private:
T data_;
};
template <typename T>
Derived<T>::Derived(T data)
: IBase(),
data_(data)
{
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const Derived<T>& dt)
{
os << dt.data_;
return os;
}
int _tmain(int argc, _TCHAR* argv[])
{
// Question 1
Derived<int> der(234);
std::cout << der;
// Question 2
//IBase* base = new Derived<int>(5);
// std::cout << *base
}
下面是錯誤:
錯誤LNK2001:解析外部符號「類 的std :: basic_ostream> & __cdecl 操作者< <(類的std :: basic_ostream
「(?? 6 @ YAAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ st(&,class Derived const &) ?d @@ AAV01 @ $ ABV派生3 H @@@ Z)
和
致命錯誤LNK1120:1周無法解析的外部
謝謝!這就是訣竅 –