也许你可以帮助我做到这一点。 我有一个用于绘制圆的类,但编译器向我发送了这条消息:
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
答案 0 :(得分:9)
不使用 one-massive-include-to-includes-everything (预编译头文件除外)。这几乎肯定会导致头痛。
包括您需要的内容,而不是更多。它会解决你的问题。
您可以将Circle
转发为DanDan suggested,但从长远来看,修复包含问题会对您有所帮助。
答案 1 :(得分:2)
您可能有循环包含。使用前瞻声明:
class GameApp {
class Cicle;
...
答案 2 :(得分:1)
我会检查你的make文件,以确保构建顺序正确,然后在每个.h中尝试包含.h。如果两者都很简单,请尝试组合该类。祝你好运
答案 3 :(得分:1)
Includes.h包含GameApp.h。因此Circle在第一次遇到GameApp的定义时尚未定义。就像DanDan说前锋宣布Circle。
答案 4 :(得分:1)
在Includes.h中,您需要将#include "Circle.h"
移到#include "GameApp.h"
之前。更好的是,直接从GameApp.h中包含Circle.h。每个头文件都应该包含直接编译所需的一切。
答案 5 :(得分:0)
@James是对的 - Circle.h #includes GameApp.h,如原始编译器消息所示,GameApp.h #includes Circle.h通过经过深思熟虑的“include-all”Includes.h但是由于Circle.h上的多余包括保护,#include包含无用。