我有一个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我都没有爱。我如何转发声明这个类?
答案 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