0

ええと、私に何が起こっているのか本当に奇妙ですが、はっきりさせようと思います。私はクラスを持っており、1 つのメソッドで (hpp 定義と cpp 実装で) スローを設定することにしました。そのため、std::exception をスローできるメソッドがあります。ここでは問題ありません。

私は私の例外を作成します:

class MyException : public std::exception {
public:
   MyException() throw();
   ~MyException() throw();
   const char what() const throw();
}

わかりました、私のメソッドでそれを使用しましょう:

class myclass {
   void mymethod() throw(std::exception);
}

に:

class myclass {
   void mymethod() throw(MyException); // I have included hpp file where MyException is defined
}

わかった!これは私が得るものです

/tmp/ccwSS5GE.o:(.gcc_except_table+0x84): 'typeinfo for MyException' への参照が未定義です collect2: ld が 1 つの終了ステータスを返しました

どうして??std::exception を使用すると、すべて正常に動作しますが、今では何も正常に動作しません。

4

1 に答える 1

2

OPコードは形式が正しくなく、UBのゾーンにないため、コンパイルエラーが発生するはずです(これは、ここで驚くべきリンカエラーを説明する可能性があります)。

問題はあなたの宣言だと思います。

const char what() const throw();

クラスの戻り値の型 'const char' は、次のように定義されている基本クラス std::exception のものと共変ではありません。

virtual const char* std::exception::what()  const throw () 
于 2010-11-26T02:38:37.640 に答える