如何在 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
}
我的 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
}