在 ubuntu 14.04 上使用 g++ 编译 client_test.cpp 的问题
Posted
技术标签:
【中文标题】在 ubuntu 14.04 上使用 g++ 编译 client_test.cpp 的问题【英文标题】:Issues compiling client_test.cpp using g++ on ubuntu 14.04 【发布时间】:2014-09-16 23:52:29 【问题描述】:我正在尝试编译 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
感谢您的帮助,如果我应该提供任何其他信息来帮助诊断问题,请告诉我。
【问题讨论】:
那是非常多的代码和非常多的错误。而且我们并不是真正的调试服务。您是否尝试过自己修复它?也许你应该去你得到代码的地方问这个问题?或者也许研究一些随附的手册? 【参考方案1】:正如 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;
【讨论】:
"要解决这个问题,您需要使用指针:" ...和前向声明! 在这种情况下您不需要使用前向声明。类 A A* a; ;一个;乙; b.a = &a;工作得很好。 "您不需要使用前向声明..." 是的,但在大多数情况下它是更好的选择(同时省略#include
声明依赖的类声明)
好的,我把它包含在解释中了。感谢您指出。以上是关于在 ubuntu 14.04 上使用 g++ 编译 client_test.cpp 的问题的主要内容,如果未能解决你的问题,请参考以下文章
sh 在Ubuntu Trusty上安装g ++ 5.x(14.04)
(原)ubuntu14.04中安装gcc4.9和g++4.9