我的cpp文件中有一个包含冒号定义的结构:
struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface
{
<definitions>
}
如何在头文件中定义此结构? 如果我只是这样做:
struct GeomMeshLoader;
然后我将在编译包含此标题的另一个cpp文件时获得:
allocation of incomplete type 'GeomMeshLoader'
如果我声明标题如下:
struct GeomMeshLoader: VRayStaticGeomSource, VRaySceneModifierInterface;
然后它将在编译时失败:
error: expected '{' after base class list
放入包含冒号的头结构定义的方法是什么?
答案 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
}