Я пытаюсь скомпилировать одну из примеров программ, предоставляемых libtorrent, под названием client_test.cpp. Это код:
Я компилирую с этой командой:
g++ client_test.cpp -DBOOST_ASIO_SEPARATE_COMPILATION -I/usr/local/include -o client_test >& log
Это журнал ошибок:
Спасибо за любую помощь, и дайте мне знать, если есть какая-либо другая информация, которую я должен предоставить, чтобы помочь диагностировать проблему.
Как сказал Павел, это очень много кода …
Я вижу много неполных ошибок типа. Этот тип ошибки возникает, когда вы пытаетесь выделить место для структуры, которая еще не полностью реализована / не известна, и поэтому компилятор не может выделить ее правильно и возвращает эту ошибку.
Например здесь:
class A {
A aVariableOfTypeA;
...
}
вы получите ту же ошибку.
Чтобы это исправить, вам нужно использовать указатель:
class A {
A* aVariableOfTypeA;
...
}
В тот момент, когда компилятор находит переменную-член (aVariableOfTypeA), тип «Класс 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;
}