【发布时间】:2013-07-31 11:45:13
【问题描述】:
我正在开发一个链接到 C 库的 C++ 项目。我的 C++ 类如下:
extern "C" {
struct __struct1__;
struct __struct2__;
struct __struct3__;
struct __struct4__;
}
namespace mynamespace {
class MyClass : public Parent {
public:
....
private:
....
__struct1__* s1;
__struct2__* s2;
struct __struct3__ s3;
struct __struct4__ s4;
};
}
在创建像 s1 和 s2 这样的指针时,一切正常。但是对象不能很好地工作。产生如下错误:
使用未定义的结构时出错
如何创建像 s3 和 s4 这样的对象?
【问题讨论】:
-
确保
__struct4__有一个完整的定义,而不仅仅是一个声明。如果没有被告知,编译器应该如何知道__struct4__中的内容!? -
编译器总是知道指针的大小(因此它总是能够创建指针)。编译器永远不会知道用户定义类型的大小,除非它的定义得到满足(在这里,您没有为 s3 和 s4 定义类型,因此编译器不知道如何处理它们)。
-
很好,但是我如何告诉编译器该做什么呢?
-
请注意,以双下划线开头的名称是为“实现”保留的,不应由您创建。