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