转发在Objective-C ++文件中声明一个C ++类?

时间:2011-11-26 19:45:52

标签: objective-c objective-c++

我有一个Objective-C ++文件,我有两个类:一个Objective-C,一个C ++:

@implementation ClassA

....
// Create a copy of MyClass and use it in another C++ class
instanceOfCppClassB->callFunction(new MyClass);

@end

class MyClass : public AnotherClass
{
....

};

这可以编译并运行在C ++类的顶部,但我想把它移到底部。当我将它移到底部时,我得到错误:

  

无效使用不完整类型'struct MyClass'   'struct MyClass'的前向声明

无论使用typedef,struct,@ class我都没有爱。我如何转发声明这个类?

2 个答案:

答案 0 :(得分:2)

C ++类的前向声明不允许您使用该类的实例,您可以只传递它们。 (为了简化示例,我省略了任何Objective-C。)

class Something;

void function(void)
{
    Something *x;         // Ok
    x = new Something();  // Error
    int z = x->field;     // Error
    x->method();          // Error
}

class Something : public Other { ... };

void function2(void)
{
    Something *x;         // Ok
    x = new Something();  // Ok
    int z = x->field;     // Ok
    x->method();          // Ok
}

在使用之前,必须先放置类的完整定义。前向声明只允许您使用类的类型声明变量。

所以答案是:你提出的问题是不可能的。(将课程定义置于最高位置有什么问题?)

您仍然可以将方法放在底部:

class Something {
public:
    void method();
};

@implementation ...
...
@end

void Something::method() { ... }

答案 1 :(得分:0)

只需在ClassA之前添加类MyClass Prototype。

class MyClass;
....
@implementation ClassA
....

// Create a copy of MyClass and use it in another C++ class
instanceOfCppClassB->callFunction(new MyClass);

@end