0

我对以下文件有一点问题:

我在这个文件上有弧球结构:

#ifndef ARCBALL_H_
#define ARCBALL_H_

#include "ex1.h"

...

extern struct arcball{
    float radius;
    int x,y;
}arcball;

...

#endif /* ARCBALL_H_ */

我有以下 ex1.h 文件,其中包含 arcball.h 文件:

#ifndef __EX1_H__
#define __EX1_H__


////////////////////////////
// Project Includes         
////////////////////////////

#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include "arcball.h"


////////////////////////////
// OpenMesh Includes        
////////////////////////////

#include "OpenMesh/Core/IO/MeshIO.hh"
#include "OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh"

////////////////////////////
// GL Includes              
////////////////////////////

#include "GLee.h"
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

...

struct arcball arcball;
#endif

我必须包含 ex1.h 标头,因为 ex1.h 包含我在 arcball.cpp 文件中使用的 glut 函数。我必须使用 arcball.h 标头才能使用该文件上定义的函数和结构。

我得到的错误如下:

In file included from arcball.h:11:0,
                 from arcball.cpp:8:
ex1.h:120:16: error: aggregate ‘arcball arcball’ has incomplete type and cannot be defined
make: *** [ex1] Error 1

我不明白为什么它是一个不完整的类型,因为我包含了 arcball.h 文件

这是相互包含问题还是结构定义/使用问题?以及如何解决?

谢谢!

4

1 回答 1

1

这两个.h文件相互包含,造成了很多混乱。这是一个非常糟糕的主意,因为#ifdef根据首先包含哪个文件,周围会产生不同的效果:在这种情况下,arcball.h -> ex1.h -> arcball.h-but-really-nothing-because-of-the -#ifdef。

extern此外,在没有标头(此处为 ex1.h)中声明变量也是一个坏主意。这可能没有你想要的效果。没有的变量extern只能在.c文件中声明。

于 2012-11-17T20:51:24.320 回答