0

私はクラスを持っています:

class MakeMeshStructure : public QObject
{
Q_OBJECT
public:

MakeMeshStructure(QObject* parent = 0) {}

その関数の1つの中で私はこれを行います:

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

3 に答える 3

4

You must add a forwarding class declaration to your class:

class MakeMeshStructure; // IMPORTANT: Declares a forwarding class

class CadPanel : public QObject 
{

    Q_OBJECT
public:

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

Note that if the classes are in separate namespaces, you must qualify the name with the proper namespace.

于 2012-07-03T14:00:10.343 に答える
1

エラーの理由は、MakeMeshStructureコンパイル時にコンパイラがCadPanelクラスを認識していないためです。

MakeMeshStructureメソッドはこの問題へのポインターのみを使用しているため、CadPanel次の前方宣言を使用して解決できます。CadPanel

class MakeMeshStructure; // Forward declaration of MakeMeshStructure

class CadPanel
{
    Q_OBJECT

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

ただし、MakeMeshStructureメソッドが you のインスタンスを作成した場合は、定義されCadPanelたヘッダーを含める必要があります。これは、クラスの完全な定義のCadPanelインスタンスを作成するために必要なためです。CadPanel

于 2012-07-03T14:26:19.893 に答える
1

CadPanel::draw() での MakeMeshStructure の使用方法によっては、MakeMeshStructure の定義を含むヘッダーを含める必要がある場合があります。

#include "MakeMeshStructure.h"

または、CadPanel の定義の前に単純に前方宣言を行います。

class MakeMeshStructure;
class CadPanel : public QObject
{
...
于 2012-07-03T14:23:13.530 に答える