我正在尝试编译libtorrent提供的一个名为client_test.cpp的示例程序。这是代码:
我正在使用此命令进行编译:
g++ client_test.cpp -DBOOST_ASIO_SEPARATE_COMPILATION -I/usr/local/include -o client_test >& log
这是错误日志:
感谢您提供任何帮助,如果有任何其他信息可以帮助我诊断问题,请告诉我。
答案 0 :(得分:1)
正如帕维尔所说,这是一个非常多的代码...
我看到很多不完整的类型错误。当您尝试为尚未完全实现/已知的结构分配空间时会发生此类错误,因此编译器无法正确分配并返回此错误。
例如:
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;
}