Вперед объявлять класс C ++ в файле target-C ++? - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть файл 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Я не получаю любви.Как переслать объявление этого класса?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Предварительное объявление класса 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() { ... }
0 голосов
/ 27 ноября 2011

Просто добавьте класс MyClass Prototype перед ClassA.

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

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

@end
...