2012-07-03 3 views
0

У меня есть класс:Passing класс в качестве параметра функции

class MakeMeshStructure : public QObject 
{ 
Q_OBJECT 
public: 

MakeMeshStructure(QObject* parent = 0) {} 

внутри одной из своих функций я делаю это:

CadPanel * paneli; 
int npanelov = mesh.faces_end().handle().idx(); 
paneli = new CadPanel[npanelov]; 

, а позже это:

for(int i=0; i<npanelov;i++){ 
    if(paneli[i].wasSet)paneli[i].draw(this); 
} 

это мой класс панели:

class CadPanel : public QObject 
{ 

Q_OBJECT 
public: 

CadPanel(); 
void draw(MakeMeshStructure* parent); //error here 

Ошибка: Ошибка 27 Ошибка C2061: синтаксическая ошибка: идентификатор «MakeMeshStructure»

Как передать MakeMeshStructure родителя на который будет использоваться в этой функции CadPanel? Ty

ответ

4

Вы должны добавить объявление класса пересылки в ваш класс:

class MakeMeshStructure; // IMPORTANT: Declares a forwarding class 

class CadPanel : public QObject 
{ 

    Q_OBJECT 
public: 

    CadPanel(); 
    void draw(MakeMeshStructure* parent); // no more error :) 
} 

Обратите внимание, что если классы находятся в разных пространствах имен, вы должны определить имя с соответствующим пространством имен.

+0

Работы! Я добавил класс MakeMeshStructure; как в hh, так и в cc. – pazduha

+0

@ пользователь1220769 прохладный! Не забудьте принять ответ. –

1

В зависимости от использования вы делаете из MakeMeshStructure в CadPanel :: Жеребьевка(), вы, возможно, потребуется включить заголовок, содержащий определение MakeMeshStructure:

#include "MakeMeshStructure.h" 

или просто сделать заявление вперед перед определением CadPanel :

class MakeMeshStructure; 
class CadPanel : public QObject 
{ 
... 
1

причина вашей ошибки, потому что, когда MakeMeshStructure компилируется компилятор не имеет никакого знания CadPanel класса.

Поскольку метод MakeMeshStructure только использует указатель на CadPanel эту проблему можно решить, используя вышеописанную декларацию CadPanel

class MakeMeshStructure; // Forward declaration of MakeMeshStructure 

class CadPanel 
{ 
    Q_OBJECT 

public: 
    CadPanel(); 
    void draw(MakeMeshStructure* parent); 
}; 

Однако, если метод MakeMeshStructure создал экземпляр CadPanel вам потребуется включить заголовок, в котором было определено CadPanel. Это связано с тем, что для создания экземпляра CadPanel требуется полное определение класса.

Смежные вопросы