在 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)

linux-ubuntu14.04以下使用gdb出现的问题

(原)ubuntu14.04中安装gcc4.9和g++4.9

[Caffe学习日志] 在Ubuntu14.04上安装MATLAB2014a并编译其接口

Ubuntu 14.04 LTS 安装和配置Bochs

ubuntu14.04上编译安装python3.7.3