-4

我正在尝试编译 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

感谢您的帮助,如果我应该提供任何其他信息来帮助诊断问题,请告诉我。

4

1 回答 1

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;
}
于 2014-09-17T00:15:10.503 回答