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”

如何传递 MakeMeshStructure 父级以在此 CadPanel 函数中使用?泰

4

3 回答 3

4

您必须向您的类添加一个转发类声明:

class MakeMeshStructure; // IMPORTANT: Declares a forwarding class

class CadPanel : public QObject 
{

    Q_OBJECT
public:

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

请注意,如果这些类位于不同的命名空间中,则必须使用正确的命名空间限定名称。

于 2012-07-03T14:00:10.343 回答
1

根据您在 CadPanel::draw() 中对 MakeMeshStructure 的使用,您可能需要包含包含 MakeMeshStructure 定义的标头:

#include "MakeMeshStructure.h"

或者干脆在定义 CadPanel 之前做一个前向声明:

class MakeMeshStructure;
class CadPanel : public QObject
{
...
于 2012-07-03T14:23:13.530 回答
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需要完整定义类。

于 2012-07-03T14:26:19.893 回答