C++ 当我将构造函数定义放在主体中而不是头文件中时,为什么会得到未定义的引用?
我遵循的是在的教程,使用确切的说明,即没有为cocos控制台指定任何包(尝试使用包以达到相同的效果),并使用new->Other->C/C++->类来创建标题和正文(而不是2xnew->文件),使事情变得简单: HelloWorld场景C++ 当我将构造函数定义放在主体中而不是头文件中时,为什么会得到未定义的引用?,c++,android-ndk,cocos2d-x,C++,Android Ndk,Cocos2d X,我遵循的是在的教程,使用确切的说明,即没有为cocos控制台指定任何包(尝试使用包以达到相同的效果),并使用new->Other->C/C++->类来创建标题和正文(而不是2xnew->文件),使事情变得简单: HelloWorld场景 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : publi
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::Layer
{
protected:
CatchMe* Game;
public:
static cocos2d::Scene* createScene();
virtual bool init();
void menuCloseCallback(cocos2d::Ref* pSender);
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorld.cpp
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
origin.y + closeItem->getContentSize().height/2));
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu, 1);
Game = new CatchMe();
auto label = LabelTTF::create("Hello World", "Arial", 24);
label->setPosition(Vec2(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - label->getContentSize().height));
this->addChild(label, 1);
auto sprite = Sprite::create("HelloWorld.png");
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(sprite, 0);
return true;
}
void HelloWorld::menuCloseCallback(Ref* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
抓住我
#ifndef CATCHME_H_
#define CATCHME_H_
class CatchMe {
public:
CatchMe();
~CatchMe();
};
#endif /* CATCHME_H_ */
CatchMe.cpp
#include "CatchMe.h"
CatchMe::CatchMe() {
}
CatchMe::~CatchMe() {
}
我得到了对CatchMe::CatchMe()的未定义引用代码>
但如果我从正文中删除上述函数的定义并将其放在标题中:
CatchMe() {}
看起来,一切都很美好
这在eclipse和从命令行生成时发生
我很想用像default-cunstuctor这样的术语来澄清,但自从我上次编写代码以来已经太长时间了,而且我添加的所有方法都出现了这种情况。。。奇怪根据我在问题下的评论-解决方案是添加CatchMe.cpp
以在Android.mk
中建立秩序。该文件可以在名为jni
的文件夹中的项目树中找到。所有.cpp
文件都应该添加到那里
不久前,我创建了一个小脚本(mac/linux)来帮助实现这一点,详细信息可以在这里找到:在Eclipse的项目树中,应该有一个名为jni
的文件夹,其中包含一个文件Android.mk
。请检查您的CatchMe.cpp
是否在LOCAL\u SRC\u FILES
列表中,如果没有,请将其添加到列表中,然后重试。哇,谢谢,希望stackoverflow会将其编入索引以供将来参考,不知道我怎么会不知道:)在NDK手册中花费的时间不够,我怀疑我不确定这是否是解决方案,所以我只是发表了评论-我现在将发布答案:)