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 を使用しないでください(プリコンパイル済みヘッダーを除く)。ほぼ確実に頭痛になります。

必要なものを含めてください。それはあなたの問題を解決します。

DanDan が提案したように、宣言を転送できCircleますが、包含の問題を修正すると、長期的にはより役立ちます。

于 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 をインクルードします。そのため、GameApp の定義に最初に遭遇したとき、Circle はまだ定義されていません。DanDan が言うように、前方宣言 Circle を宣言します。

于 2010-07-28T19:38:52.897 に答える
1

#include "Circle.h"includes.h では、 を の前に移動する必要があります#include "GameApp.h"。さらに良いことに、GameApp.h から直接 Circle.h をインクルードするだけです。各ヘッダー ファイルには、直接コンパイルするために必要なすべてのものが含まれている必要があります。

于 2010-07-28T19:39:37.187 に答える
0

@James は正しいです -- 元のコンパイラ メッセージで示されているように、Circle.h は GameApp.h を #includes します。 #include は、Circle.h の冗長なインクルード ガードにより役に立たない

于 2010-07-28T19:39:30.870 に答える