このコードはコンパイルされます(Visual Studio 2013)。私は、Set<T>
ではなく、Set
を、クラス定義の外にある関数本体のoperator =のパラメータとして渡していることに注意してください。しかし、私はSet
を返すことができないか、Set
のメンバーになることはできません。 Set<T>
を返し、Set<T>
のメンバーである必要があります。テンプレートクラスメンバ関数本体で、クラス定義の外に、テンプレートパラメータはいつ必要ですか?
テンプレートパラメータを削除するのは正当な理由はありますか? Inside the class definition、および他にはどこですか?
これは標準の変更ですか?私は98を含む既存のすべてのバージョンとの互換性を維持しようとしています。
template <typename T>
class Set
{
public:
Set() {}
const Set& operator=(const Set& rhs);
//Shouldn't this have to be
//const Set<T>& operator= (const Set<T>& rhs); ?
};
template <typename T>
const Set<T>& Set<T>::operator= (const Set& rhs) //<-- HERE
{
Set temp; //<-- AND HERE
/* ... */
return *this;
}
int main()
{
Set<int> S, T;
T = S;
}
私の知る限り唯一のクラス、彼らが注入されたクラス名 – NathanOliver
、ここを持っているので、これを行います自動設定 :: operator =(const Set&) - > const& ' –
void main'は無効で、多くの(ほとんどの)読者があなたのコードを試してしまうのを防ぎました。私はそれを修正した。質問が具体的なものでない限り、初心者の読者を誤認させ、少数のコンパイラのうちの1つを使用しない限り、あなたのコードをコピーして貼り付けることができないので、 'void main'のコードを投稿しないでくださいそれを受け入れる –