C++ 使用g+编译client_test.cpp+;在ubuntu 14.04上
我正在尝试编译libtorrent提供的一个名为client_test.cpp的示例程序。代码如下: 我正在使用以下命令进行编译:C++ 使用g+编译client_test.cpp+;在ubuntu 14.04上,c++,g++,libtorrent,C++,G++,Libtorrent,我正在尝试编译libtorrent提供的一个名为client_test.cpp的示例程序。代码如下: 我正在使用以下命令进行编译: g++ client_test.cpp -DBOOST_ASIO_SEPARATE_COMPILATION -I/usr/local/include -o client_test >& log 这是错误日志: 谢谢您的帮助,如果有任何其他信息可以帮助诊断问题,请告诉我。正如Pawel所说,这是一个非常多的代码 我看到很多不完整的类型错误。当您试图
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)的那一刻,类型“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;
}
这是非常多的代码和错误。我们不是真正的调试服务。你试过自己修吗?也许你应该去你获取代码的地方问这个问题?或者学习它附带的一些手册?”要解决这个问题,你需要使用一个指针:“。。。和一个向前的宣言!在这种情况下,不需要使用转发声明。A类{A*A;};A A;A b;b、 a=&a;很好,“您不需要使用转发声明…”是的,但在大多数情况下它是更好的选择(省略类声明所依赖的
#include
语句)好的,我在解释中包含了它。谢谢你指出这一点。