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

时间:2016-02-05 11:03:39

标签: c++ struct header

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

struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface
{
   <definitions>
}

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

struct GeomMeshLoader;

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

allocation of incomplete type 'GeomMeshLoader'

如果我声明标题如下:

struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface;

然后它将在编译时失败:

error: expected '{' after base class list

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

1 个答案:

答案 0 :(得分:3)

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
}