在ubuntu 14.04上使用g ++编译client_test.cpp的问题

时间:2014-09-16 23:52:29

标签: c++ g++ libtorrent

我正在尝试编译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 个答案:

答案 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;
}