将类作为函数参数传递
Passing class as function parameter
我有一个类:
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
的实例,需要类的完整定义。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称