C++;在Xcode中调用类问题 我使用COCOS2DX作为我的游戏之一,我对C++是新的。 我正在创建一个类 我的代表 #包括“cocos2d.h”

C++;在Xcode中调用类问题 我使用COCOS2DX作为我的游戏之一,我对C++是新的。 我正在创建一个类 我的代表 #包括“cocos2d.h”,c++,objective-c,ios,xcode,cocos2d-x,C++,Objective C,Ios,Xcode,Cocos2d X,和myDelegate.m include "myOFDelegate.h" myOFDelegate::myOFDelegate(){ } myOFDelegate::~myOFDelegate(){ } void myOFDelegate::RunME(){ CCLog("call me"); } 在我的Hello场景中,我通过触摸菜单按钮调用RunME方法,如下所示 myOFDelegate *ofDelegate = new myOFDelegate();

和myDelegate.m

include "myOFDelegate.h"

myOFDelegate::myOFDelegate(){    }

myOFDelegate::~myOFDelegate(){    }

void myOFDelegate::RunME(){
    CCLog("call me");
}
在我的Hello场景中,我通过触摸菜单按钮调用RunME方法,如下所示

myOFDelegate *ofDelegate = new myOFDelegate();
    ofDelegate->RunME();
但是我收到了这个错误消息



当然,当我把这两行注释掉的时候

myOFDelegate *ofDelegate = new myOFDelegate();
        ofDelegate->RunME();
该游戏编译和工作完美

你能帮我个忙吗,伙计,我两天来一直在胡思乱想,一直没能弄明白

重新获得
如果你的代码片段是对程序中的内容的准确反映,那么你就可以在C++和Objtovi.C之间产生区别。C++与Objy-C不同,你必须声明你的类将实现的所有方法,即使你是超越基类实现。因此,如果实现void myOFDelegate::RunME(),则需要在关联的头文件中声明该方法。其中您已声明
void callingMe(),下面声明
void RunMe()


您还没有向我们展示callingMe()方法的实现。注意,正如您在标题中声明的那样,您也必须实现它;您不能忽略实现。

您使用的是myOFDelegate.m还是myOFDelegate.mm?在Xcode中,cpp文件和objective-c文件使用不同的扩展名


在您的cpp文件中,使用#include(不包括或#import)

默认情况下不会编译您在myDelegate.m中列出的内容。您得到的错误与未在项目中生成myDelegate.m一致。Xcode确定扩展应使用的编译器语言:

  • .m是客观C
  • .cpp是C++
  • .mm是客观的-C++

MyDeRATET.m列出的代码不是ObjuleC有效的,需要某种形式的C++编译。您可以更改用于特定文件的语言/编译器,或更改默认值,例如*.m表示Objective-C++。但是,除非您的项目执行这两件事中的一件,否则myDelegate.m将无法按编写的方式编译。你确定它真的包含在构建中吗?您可以尝试将一个

#错误测试
行插入
myOFDelegate::myOFDelegate()
,以确保确实正在将myOFDelegate构建到项目中。

您创建.cpp类而不是.m类,然后编写该类的实现。如果不想做.Cp扩展,则需要编写.C++文件,在上面可以写C++代码。p> 你应该从发布正确的代码开始。首先,您的方法被声明为callingMe,您将其定义为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)
myOFDelegate *ofDelegate = new myOFDelegate();
        ofDelegate->RunME();