将类作为函数参数传递

Passing class as function parameter

本文关键字:函数 参数传递      更新时间:2023-10-16

我有一个类:

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 函数中使用?泰

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

class MakeMeshStructure; // IMPORTANT: Declares a forwarding class
class CadPanel : public QObject 
{
    Q_OBJECT
public:
    CadPanel();
    void draw(MakeMeshStructure* parent); // no more error :)
}

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

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

#include "MakeMeshStructure.h"

或者只是在定义 CadPanel 之前进行前向声明:

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

出错的原因是,在编译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的实例,需要类的完整定义。