私はクラステンプレートのため'+'
演算子をオーバーロードしようとしているが、中置記法を使用して、それを呼び出す未解決の外部シンボルエラーを取得しています:未解決の外部シンボルエラー演算子オーバーロード+テンプレート
// In main.cpp
template<class T>
struct B
{
B(T t) : t_(t) {}
friend B operator+(B const &lhs, B const &rhs);
T t_;
};
template<class T>
B<T> operator+(B<T> const &lhs, B<T> const &rhs)
{
return B<T>(lhs.t_ + rhs.t_);
}
int main()
{
B<int> b = 1;
b = operator+<int>(b, 2); // works but clunky syntax
// b = b + 2; // LNK2019: unresolved external symbol
}
これは、通常の非テンプレートのために正常に動作しますクラスでは同じことをここで達成できるかどうか疑問に思っています。
私は、Visual C++ 2015
'友人B演算子+(Bのconstの&LHS、Bのconstの'されていないテンプレート宣言は、しかし、あなたは1を定義し – LogicStuff
ものhttp参照してください。: //stackoverflow.com/questions/11864102/why-is-friend-member-function-not-recognized-as-function-template-automatically –
現在、すべてのメンバーは 'public'なので、' friend'は必要ありません。 - ) – Jarod42