2

クラスのインスタンスへのポインタを指定して、作成したカスタム クラスをシリアル化しようとしています。を解決できないため、このコードはコンパイルに失敗しますoperator<<(out, myObj)

QDataStream& operator<<(QDataStream &out, MyObj const *&m);
QDataStream& operator>>(QDataStream &in, MyObj *&m);

void MainWindow::serialize(QDataStream &out)
{
  MyObj *myObj = new MyObj();
  operator<<(out, myObj);
}

void MainWindow::deserialize(QDataStream &in)
{
  MyObj *myObj = new myObj();
  operator>>(in, myObj);
}

QDataStream &operator<<(QDataStream &out, MyObj const *&) { return out; }

QDataStream &operator>>(QDataStream &in, MyObj *&) { return in; }

コンパイルエラーは次のとおりです。

MainWindow.cpp:79:33: error: call of overloaded 'operator<<(QDataStream&, MyObj*&)' is ambiguous
MainWindow.cpp:79:33: note: candidates are:
../Qt5.0.1/5.0.1/gcc_64/include/QtCore/qchar.h:395:28: note: QDataStream& operator<<(QDataStream&, QChar) <near match>
../Qt5.0.1/5.0.1/gcc_64/include/QtCore/qchar.h:395:28: note:   no known conversion for argument 2 from 'MyObj*' to 'QChar'
...

興味深いことに、コンパイラは最初の演算子のオーバーロードを見つけられないだけです。オブジェクト ポインターへの参照ではなく、オブジェクト参照を使用することでこれを修正できますが、これがコンパイルされない理由に興味があります。

コンパイラが最初の演算子の実装を見つけられないのはなぜですか?

4

1 に答える 1