Проблемы компиляции client_test.cpp с использованием g ++ на Ubuntu 14.04

Я пытаюсь скомпилировать одну из примеров программ, предоставляемых libtorrent, под названием client_test.cpp. Это код:

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

Решение

Как сказал Павел, это очень много кода …

Я вижу много неполных ошибок типа. Этот тип ошибки возникает, когда вы пытаетесь выделить место для структуры, которая еще не полностью реализована / не известна, и поэтому компилятор не может выделить ее правильно и возвращает эту ошибку.

Например здесь:

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;
}
1

Другие решения


По вопросам рекламы [email protected]