0

也许你能帮我把这件事做好。我有一个用于画圆的类,但编译器向我发送了这条消息:

In file included from ./Includes.h:19,
                 from ./Circle.h:8,
                 from ./Circle.cpp:5:
./GameApp.h:24: error: ISO C++ forbids declaration of 'Circle' with no type
./GameApp.h:24: error: expected ';' before '*' token

这是GameApp.h:

#include "Includes.h"

class GameApp {

public:
 GameApp();
 ~GameApp();
 void Render();

protected:
 void InitGU();
 bool Controls();

 void *dList;  // display List, used by sceGUStart
 void *fbp0;  // frame buffer

 Circle* circle;
};

Include.h 看起来像这样:

//************************************************************************
//                              Includes.h
//************************************************************************

#include <malloc.h>     //For memalign()
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspdebug.h>
#include <stdio.h>
#include <psprtc.h>             // for the timer/fps functions
#include <pspctrl.h>
#include <math.h>

// GU
#include <pspgu.h>
#include <pspgum.h>

// Custom
#include "GameApp.h"
#include "Circle.h"


//************************************************************************

// Definitions
#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)

#define sin_d(x) (sin((x)*M_PI/180))
#define cos_d(x) (cos((x)*M_PI/180))
#define tan_d(x) (tan((x)*M_PI/180)) 

//************************************************************************

// structs, datatypes...
#ifndef VERTEX_TYPE_
#define VERTEX_TYPE_
typedef struct {
    unsigned int color;
    float x, y, z;
} vertex;
#endif

还有 Circle.h

//************************************************************************
//                              Circle.h
//************************************************************************

#ifndef CIRCLE_H_
#define CIRCLE_H_

#include "Includes.h"

class Circle {

public:
    Circle(float r1);
    ~Circle();
    void Render();

    float r;
    float x, y;
    float vx, vy;

protected:
    vertex* vertices;
    int n;

};

#endif
4

6 回答 6

9

不要使用one- massive -include-to-include-everything(预编译头文件除外)。这几乎肯定会导致头痛。

包括您需要的,仅此而已。它会解决你的问题。

Circle您可以按照DanDan 的建议转发声明,但从长远来看,解决您的包含问题将对您有更多帮助。

于 2010-07-28T19:38:46.000 回答
2

您可能有循环包含。使用前向声明:

class GameApp { 
class Cicle;
...
于 2010-07-28T19:36:04.170 回答
1

我会检查您的 make 文件以确保构建顺序正确,然后在每个 .h 结尾中包含两个 .h 如果两者都很简单,请尝试组合该类。祝你好运

于 2010-07-28T19:38:39.827 回答
1

Includes.h 在包含 Circle.h 之前包含 GameApp.h。所以Circle在第一次遇到GameApp的定义时还没有定义。就像DanDan说的向前宣告Circle。

于 2010-07-28T19:38:52.897 回答
1

在 Includes.h 中,您需要#include "Circle.h"#include "GameApp.h". 更好的是,只需直接从 GameApp.h 包含 Circle.h。每个头文件都应包含直接编译所需的所有内容。

于 2010-07-28T19:39:37.187 回答
0

@James 是对的——Circle.h #includes GameApp.h,如原始编译器消息所示,GameApp.h #includes Circle.h 通过考虑不周的“include-all” Includes.h,但是#include 由于 Circle.h 上的冗余包含保护而无用

于 2010-07-28T19:39:30.870 回答