0

元のメッセージを編集して、コードをそのまま含めました。ご迷惑をおかけして申し訳ありません。

これは、プロジェクトに追加したクラスへのポインターを使用しようとしている場所です。

#ifndef MYAPP_DivGameLayer_h
#define MYAPP_DivGameLayer_h

// When you import this file, you import all the cocos2d classes
#include "cocos2d.h"
#include "Box2D.h"
#include "DivBall.h"    

#define PTM_RATIO 32
#define GRAVITY -10.0f
#define VELOCITY_ITERS 8
#define POSITION_ITERS 1
#define BALLS_COUNT 2

class DivGameLayer : public cocos2d::CCLayer {

public:

    ~DivGameLayer();
    DivGameLayer();

    // returns a Scene that contains the layer as the only child
    static cocos2d::CCScene* scene();

    // functions for handling user input touches    
    virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);

    // game update loop function
    void update(float dt);

private:

    // CONSTANTS
    float SCREEN_WIDTH;
    float SCREEN_HEIGHT;

    b2World* world;                 // the game's world
    DivBall* balls;                 // balls
    int next;                       // pointer to next ball

    // initialize the game's world
    void initWorld();

    // initialize balls
    void initBalls();
};
#endif

これは私のDivBallヘッダーファイルです:

#ifndef MYAPP_DivBall_h
#define MYAPP_DivBall_h

#include "DivGameLayer.h"

#define PATH "ball.png"
#define DENSITY 0.25f
#define FRICTION 0.1f
#define RESTITUTION 0.7f

class DivBall : public cocos2d::CCSprite {

public:

    ~DivBall();
    DivBall(DivGameLayer layer, b2World* world, cocos2d::CCPoint location, float Vx, float Vy, float omega);

private:

    DivBall();    
    b2Body* body;

};

#endif

これはDivBall.cppです:

#include "DivBall.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;

// defualt CTOR
DivBall::DivBall()
{

}

// CTOR
DivBall::DivBall(DivGameLayer layer, b2World* world, CCPoint location, float Vx, float Vy, float omega)
{
    CCSprite *sprite = CCSprite::create(PATH);
    sprite->setPosition( CCPointMake(location.x, location.y) );
    layer->addChild(sprite);

    // Define the dynamic body.
    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(location.x/PTM_RATIO, location.y/PTM_RATIO);
    bodyDef.userData = sprite;
    b2Body *body = world->CreateBody(&bodyDef);

    // Define a circle shape for our dynamic body.
    b2CircleShape circle;
    circle.m_radius = (sprite->getContentSize().width/2.0f)/PTM_RATIO;


    // Define the dynamic body fixture.
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &circle;
    fixtureDef.density =  DENSITY;
    fixtureDef.friction = FRICTION;
    fixtureDef.restitution = RESTITUTION;
    body->CreateFixture(&fixtureDef);

    // set velocity
    body->SetLinearVelocity(b2Vec2(Vx/PTM_RATIO, Vy/PTM_RATIO));
    body->SetAngularVelocity(omega);
}

// DCTOR
DivBall::~DivBall()
{
        // nothing...
}

GameLayerでコンパイルエラーが発生します:不明なタイプ名Ball。

はっきりしないのでごめんなさい。

4

1 に答える 1

1

私は自分のクラスを作成しました、たとえばfoo

いいえ、していません。ヘッダーファイルと実装ファイルのみを作成しました。あなたがコメントで言及するように:

foo.hには何もありません。ファイルを追加しました:foo.hとfoo.cpp

さて、コンパイラはあなたfooに未知の型名であると言っています、そしてあなたがという名前の型を定義していないのでそれは理にかなっていますfoo。ヘッダーfoo.hは空です。fooそのヘッダーに名前を付けたタイプを追加するだけです。例:

class foo
{
    // Whatever...
};

編集:

更新後、問題が何であるかが明確になりました。クラスの定義で、DivGameLayer型のメンバー変数を宣言しますDivBall*。ただし、DivBall.hヘッダーは、DivGameLayerが定義されているヘッダーには含まれません。したがって、そのクラス定義を処理している間、タイプDivBallは不明です。

そのための前方宣言を追加する必要があります。

class DivBall; // <== ADD THIS

class DivGameLayer : public cocos2d::CCLayer 
{
    ...
};
于 2013-03-03T13:12:52.393 に答える