1

ゲームの 1 つに Cocos2dX を使用していますが、C++ は初めてです。クラス myDelegate.h #include "cocos2d.h" を作成しています

 class myOFDelegate : public cocos2d::CCLayer{
public:
    ~myOFDelegate();
    myOFDelegate();
   void RunME();
};

#endif

および myDelegate.m

include "myOFDelegate.h"

myOFDelegate::myOFDelegate(){    }

myOFDelegate::~myOFDelegate(){    }

void myOFDelegate::RunME(){
    CCLog("call me");
}

そして、メニュー ボタン タッチの Hello シーンで RunME メソッドを呼び出しています。

myOFDelegate *ofDelegate = new myOFDelegate();
    ofDelegate->RunME();

しかし、私はこのエラーメッセージを受け取ります


> Undefined symbols for architecture i386:  
> "myOFDelegate::myOFDelegate()", referenced from:
>       HelloWorld::CallThis() in HelloWorldScene.o   "myOFDelegate::RunME()", referenced from:
>       HelloWorld::CallThis() in HelloWorldScene.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with
> exit code 1 (use -v to see invocation)

もちろん、この2行をコメントアウトすると

myOFDelegate *ofDelegate = new myOFDelegate();
        ofDelegate->RunME();

ゲームは完全にコンパイルされ、動作します。

助けてくれませんか、私は2日間から髪を引っ張っていて、これを理解できませんでした

株式会社リガズ

4

4 に答える 4

0

上記のコード スニペットがプログラムの内容を正確に反映している場合、C++ と Objective-C の違いに遭遇したことになります。Objective-C とは異なり、C++ では、基本クラスの実装をオーバーライドしている場合でも、クラスが実装するすべてのメソッドを宣言する必要があります。したがって、void myOFDelegate::RunME() を実装する場合は、関連するヘッダー ファイルでそのメソッドを宣言する必要があります。あなたが宣言した場所void callingMe();、その宣言の下void RunMe();

callingMe() メソッドの実装を示していません。ヘッダーで宣言したので、それも実装する必要があることに注意してください。実装を省略することはできません。

于 2012-04-23T07:00:51.567 に答える
0

.m クラスではなく .cpp クラスを作成し、そのクラスの実装を記述します。そのクラスの .cpp 拡張子を作成したくない場合は、C++ コードを記述できる .mm ファイルを作成する必要があります。

于 2014-04-07T06:19:44.880 に答える
0

myOFDelegate.m または myOFDelegate.mm を使用していますか? Xcodeでは、cppファイルとobjective-cファイルは異なる拡張子を使用しています。

cpp ファイルで、#include を使用します (include または #import ではありません)。

于 2012-07-10T05:49:20.100 に答える
0

myDelegate.m にあるものとしてリストしたものは、デフォルトではコンパイルされません。発生しているエラーは、プロジェクトで myDelegate.m をビルドしていないことと一致しています。Xcode は、拡張機能によってコンパイラが使用する言語を決定します。

  • .m は Objective-C です
  • .cpp は C++ です
  • .mm は Objective-C++ です

myDelegate.m 用にリストしたコードは有効な Objective-C ではなく、なんらかの形式の C++ コンパイルが必要です。特定のファイルに使用する言語/コンパイラを変更したり、デフォルトを変更して、たとえば *.m が Objective-C++ を意味するようにすることができます。ただし、プロジェクトがこれら 2 つのことのいずれかを行わない限り、myDelegate.m は記述どおりにコンパイルされません。それが本当にビルドに含まれていると確信していますか? myOFDElegate が実際にプロジェクトに組み込まれていることを確認するために、1#error Test行を叩いてみることができます。myOFDelegate::myOFDelegate()

于 2012-07-10T07:00:29.050 に答える