【问题标题】:"Undefined struct" error when creating an object创建对象时出现“未定义的结构”错误
【发布时间】: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 定义类型,因此编译器不知道如何处理它们)。
  • 很好,但是我如何告诉编译器该做什么呢?
  • 请注意,以双下划线开头的名称是为“实现”保留的,不应由您创建。

标签: c++ c linker


【解决方案1】:

变量:

__struct1__ *s1

只是类型指针(指向您的结构,但仍然只是一个指针),因此编译器确切地知道该变量需要多少堆栈内存。但在以下情况下:

__struct3__ s3

这个变量的类型是__struct3__,所以没有完整的定义编译器不知道它的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多