1
我想在我的模板類重載運營商<<
和 我得到錯誤的位置,我想友元函數和錯誤LNK2019
NSizeNatural<30> a(101);
cout << a;
沒有這整個程序編譯
錯誤:
error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<<30,unsigned int,unsigned __int64,10>(class std::basic_ostream<char,struct std::char_traits<char> > &,class NSizeNatural<30,unsigned int,unsigned __int64,10> const &)" ([email protected][email protected]@[email protected][email protected]@[email protected]@@[email protected]@[email protected]? [email protected][email protected][email protected]@@Z) referenced in function _main
我Numbers.h文件:
template<int size, typename basic_type = unsigned int, typename long_type = unsigned long long, long_type base = bases(DEC)>
class NSizeNatural
{
// this is how I decelerate friend function
friend ostream& operator<<(ostream& str, const NSizeNatural<size, basic_type, long_type, base> & n);
}
在Numbers.cpp文件:
template<int size, typename basic_type, typename long_type, long_type base>
std::ostream& operator<<(std::ostream& out, const NSizeNatural<size, basic_type, long_type, base> &y)
{
// For now i want to have my code compile-able
return out << "gg";
}
我不知道如何正確地做到這一點。在哪裏是一個bug ...
簡短的回答:你必須移動運營商<<''的實施到'號.h',這樣當'main'調用這個操作符時,編譯器就可以使用它了。 –
好吧,它有助於錯誤LNK2019,所以謝謝。一個不要多麼錯過!當然,運營商的模板意味着它的模板,應該在.h文件中.... 但現在我錯誤'運營商<<'是不明確的? – Yurrili