-4

libtorrent が提供する client_test.cpp というサンプル プログラムの 1 つをコンパイルしようとしています。これはコードです:

http://pastebin.com/PWBhCXkY

私はこのコマンドでコンパイルしています:

g++ client_test.cpp -DBOOST_ASIO_SEPARATE_COMPILATION -I/usr/local/include -o client_test >& log

これはエラーログです:

http://pastebin.com/YF4VGVWr

ご協力ありがとうございます。問題の診断に役立つその他の情報があればお知らせください。

4

1 に答える 1

1

Pawelが言ったように、これは非常に多くのコードです...

不完全な型のエラーがたくさん見られます。この種のエラーは、まだ完全に実装されていない/認識されていない構造体にスペースを割り当てようとすると発生するため、コンパイラはそれを正しく割り当てることができず、このエラーを返します。

たとえば、次のとおりです。

class A {
      A aVariableOfTypeA;
      ...
}

同じエラーが発生します。

これを修正するには、ポインターを使用する必要があります。

class A {
      A* aVariableOfTypeA;
      ...
}

コンパイラがメンバ変数 (aVariableOfTypeA) を見つけた時点で、型 "Class A" は既に定義されているため、ポインタにスペースを割り当てることは正当です。語)。

あなたのコードを見て、私が上に書いたものに似たものがあるかどうかを確認してください. お役に立てれば!

--- πάντα ῥεῖ さんからのコメントに対応するには

私の例では、メンバー変数の型が独自のクラスであるため、前方宣言は必要ありません。ただし、次の点を考慮してください。

class A {
 A* memberA;
 B* memberB;
};

class B {
 A* memberA;
 B* memberB;
}

この場合、前方宣言を使用する必要があります。これは、A を定義している時点で、まだ定義されていない型 (B) を使用しているため、B がどうあるべきかをコンパイラに知らせる必要があるためです。

前方宣言あり:

class B; //Letting the compiler know that B will be a class;
class A {
 A* memberA;
 B* memberB;
};

class B {
 A* memberA;
 B* memberB;
}
于 2014-09-17T00:15:10.503 に答える