如何在头文件中定义具有继承性的结构

How to define a struct having inheritance in header file?

本文关键字:继承性 结构 定义 文件      更新时间:2023-10-16

我的 cpp 文件中有一个包含冒号定义的结构:

struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface
{
   <definitions>
}

我应该如何在头文件中定义此结构?如果我只是这样做:

struct GeomMeshLoader;

然后我将在编译另一个包含此标头的 cpp 文件时得到:

allocation of incomplete type 'GeomMeshLoader'

如果我声明标题如下:

struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface;

然后它将在编译时失败:

error: expected '{' after base class list

标题结构定义中放入包含冒号的方法是什么?

allocation of incomplete type 'GeomMeshLoader'

意味着您有一些代码尝试以某种方式使用该类型,需要查看完整定义(即不只是持有指针或引用)。如果无法计算出对象的大小,它如何分配该类型的对象?为此,它需要查看整个类:所有基类,所有成员数据。

您需要将整个类定义放在标头中。您不能转发声明它并在.cpp中具有定义。

任何成员函数

(但不是成员函数模板)的定义仍可以在.cpp中。这些成员函数的声明必须放在类定义中(在标头中)。

所以:

// geomeshloader.h
#ifndef INCLUDED_GEOMESHLOADER_H // Don't forget your header guards
#define INCLUDED_GEOMESHLOADER_H
struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface {
    int i_;
    void foo() const;
};
#endif

// geomeshloader.cpp
#include "geomeshloader.h"
void GeoMeshLoader::foo() const
{
    // do stuff
}