2012-07-03 110 views
0

我有一個類:傳遞類作爲函數參數

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」

我如何通過在這CadPanel功能使用MakeMeshStructure父?泰

回答

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

@ user1220769 cool!不要忘記接受答案。 –

1

根據您在CadPanel做MakeMeshStructure的使用::平局(),您可能需要包括含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的實例,需要完整的類定義。