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

How to define a struct having inheritance in header file?

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

struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface
{
   <definitions>
}

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

struct GeomMeshLoader;

然后我将在编译另一个包含此 header:

的 cpp 文件时得到
allocation of incomplete type 'GeomMeshLoader'

如果我这样声明 header:

struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface;

然后它会在编译时失败:

error: expected '{' after base class list

如何在 headers 包含冒号的结构定义中放入?

allocation of incomplete type 'GeomMeshLoader'

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

您需要将整个 class 定义放在 header 中。您不能转发声明它并在 .cpp.

中定义

任何成员函数(但不是成员函数模板)的定义仍然可以在.cpp中。 这些成员函数的声明 必须在class 定义中(在header 中)。

所以:

// 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
}