2013-03-03 1 views
0

Я отредактировал свое оригинальное сообщение, чтобы включить мой код точно так, как есть. Извините за неприятности.C++ Xcode, как включить и объявить мой объект

это то, где я пытаюсь использовать указатель на класс, который я добавил к моему проекту:

#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.

Извините, что не ясны.

+0

Можете ли вы показать содержание заголовка 'foo.h'? –

+0

Ну, скорее всего, потому что ваш 'foo.h' не предоставляет допустимый тип' foo'? – us2012

+2

@ us2012: Я вижу взаимное включение заголовка как наиболее вероятную проблему здесь –

ответ

1

Я создал некоторый класс моей, скажем Foo

Нет, нет. Вы создали только файл заголовка и файл реализации. Как вы упоминаете в комментариях:

нет ничего в foo.h я просто добавил файлы: foo.h и foo.cpp

Ну, то компилятор говорит вам foo неизвестный тип type, и это имеет смысл, поскольку вы не определили какой-либо тип с именем foo. Заголовок foo.h пуст. Просто добавьте тип по имени foo с этим заголовком, например:

class foo 
{ 
    // Whatever... 
}; 

EDIT:

После обновления, теперь ясно, в чем проблема. В определении вашего класса DivGameLayer вы объявляете переменную-член типа DivBall*. Однако заголовок DivBall.h не включен заголовком, где определено значение DivGameLayer. Поэтому при обработке этого определения класс DivBall неизвестен.

Вы должны добавить предобъявления для него:

class DivBall; // <== ADD THIS 

class DivGameLayer : public cocos2d::CCLayer 
{ 
    ... 
}; 
+0

Прошу прощения. Я сам не объяснил. Пожалуйста извините меня. Я получу код через несколько минут. –

+0

@ user1541941: Хорошо, пожалуйста, добавьте комментарий здесь, когда закончите. –

+0

Я обновил свое оригинальное сообщение наверху. спасибо –