0

SceneView.hの場合:

#ifndef ProtoAlpha_SceneView_h
#define ProtoAlpha_SceneView_h

#include "cocos2d.h"
#include "SceneModel.h"
#include "SceneController.h"
#include "CharacterModel.h"
#include "CharacterDerived.h"

USING_NS_CC;

class SceneView : public CCLayer {
private:
    static SceneModel* sceneModel;
    static SceneView* sceneViewLayer;
    static SceneController* sceneControllerLayer;
    CharacterModel* t1;
    CharacterModel* t2;
    CCSprite* t1Sprite;

    // scheduled Update 
    void update(float dt);

SceneView.ccpの場合:

CCScene* SceneView::scene() {
    // 'scene' is an autorelease object
    CCScene* scene = CCScene::create();

    // 'layer' is an autorelease object
    sceneModel = new SceneModel;
    sceneViewLayer = SceneView::create();
    sceneControllerLayer = new SceneController(*sceneModel->buffer);

    // add layer as a child to scene
    scene->addChild(sceneViewLayer);
    scene->addChild(sceneControllerLayer);

    // return the scene
    return scene;
}

そしてエラー:

Undefined symbols for architecture i386:
  "SceneView::sceneModel", referenced from:
      SceneView::scene() in SceneView.o
      SceneView::update(float) in SceneView.o
  "SceneView::sceneViewLayer", referenced from:
      SceneView::scene() in SceneView.o
  "SceneView::sceneControllerLayer", referenced from:
      SceneView::scene() in SceneView.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

.ccpファイルのコードをコメントアウトすると、リンカーエラーがなくなるため、ソースのコンパイルエラーになる可能性は低くなります。

少し調べてみると、このコードのシンボルが何らかの形で隠されている可能性があると言及している人が何人か見つかりました。ここで実際に何が起こっているのかを理解したいと思います。

4

1 に答える 1

4
static SceneModel* sceneModel;
static SceneView* sceneViewLayer;
static SceneController* sceneControllerLayer;

これらはすべて、であるため定義ではない宣言ですstatic。また、これらのメンバーの定義を提供する必要があります。

SceneModel* SceneView::sceneModel;
SceneView* SceneView::sceneViewLayer;
SceneController* SceneView::sceneControllerLayer;

これらが単一の変換単位(おそらくSceneView.cpp)にのみ存在することを確認してください。そうでない場合、単一定義規則に違反することになります。

于 2013-03-26T13:44:18.717 に答える