0

Student クラスの 2 つのオブジェクトがオーバーロードされたときに + 演算子をオーバーロードする関数を作成しています。この関数は、年齢と身長 (クラスの 2 つの保護されたデータ フィールド) を追加する必要があります。次に、コンストラクターを呼び出して、これらのフィールドを持つ新しい Student を作成します。これはテンプレートの演習でもあるため、これらのフィールドを削除することはできません。

プログラムをコンパイルすると、実行時にセグメンテーション違反が発生します。cout ステートメントを使用すると、新しい Student が作成され、コンストラクターが終了していることがわかりますが、その後、セグメンテーション フォールトが発生します。これはメモリの問題に違いないと認識していますが、解決策がわかりません。動的メモリを使用して、オーバーロードされた演算子とメイン関数の両方で新しい学生を作成しようとしましたが、エラーは解決しません。

コンストラクタは次のとおりです。

template <typename T>
Student<T>::Student(int age, int height)
{
    this->age = age;
    this->height = height;

    cout << "New student created"<< endl;
    return;
}  

オーバーロードされた演算子関数は次のとおりです。

template<typename T>
Student<T> Student<T>::operator+(Student<T> &secondStudent) const
{
    int a = age + secondStudent.getAge();
    int h = height + secondStudent.getHeight();

    new Student(a, h);
}

主な機能は次のとおりです。

Student<int> *s2 = new Student<int>(15, 63);
Student<int> *s3 = new Student<int>(18, 72);

Student <int> s4 = (*s2+ *s3);
cout << "did it return?" << endl;

2 つの cout ステートメントが出力されていることに注意してください。したがって、オペレーターが呼び出されて学生が作成されることはわかっていますが、メモリの問題が発生します。

4

2 に答える 2