cocos2d-x未定义的引用

M.T*_*raf 4 eclipse android cocos2d-iphone cocos2d-x

寻求一些帮助,Iam是cocos2dx的新手,并使用Eclipse IDE获得error.iam

在HelloWorld.cpp里面我这样做:

_backgroundNode = CCParallaxNodeExtras::node();
Run Code Online (Sandbox Code Playgroud)

它给了我未定义的参考错误,如下所示

对'CCParallaxNodeExtras :: node()'的未定义引用

我的CCParallaxNodeExtras.h头文件代码如下,它继承了CCParallaxNode

using namespace cocos2d;
#include "cocos2d.h"

class CCParallaxNodeExtras : public cocos2d::CCParallaxNode {

    public :

    // Need to provide a constructor
    CCParallaxNodeExtras();

    // just to avoid ugly later cast and also for safety
    static CCParallaxNodeExtras* node();

    // Facility method (it’s expected to have it soon in COCOS2DX)
    void incrementOffset(CCPoint offset, CCNode* node);
};

#endif
Run Code Online (Sandbox Code Playgroud)

这是CCParallaxNodeExtras.cpp

#include "CCParallaxNodeExtras.h"
using namespace cocos2d;

// Hack to access CCPointObject (which is not a public class)
class CCPointObject  : cocos2d::CCObject {
    CC_SYNTHESIZE(cocos2d::CCPoint, m_tRatio, Ratio)
    CC_SYNTHESIZE(cocos2d::CCPoint, m_tOffset, Offset)
    CC_SYNTHESIZE(cocos2d::CCNode *, m_pChild, Child)   // weak ref
};

// Need to provide a constructor
CCParallaxNodeExtras::CCParallaxNodeExtras() {
    cocos2d::CCParallaxNode(); // call parent constructor
}

CCParallaxNodeExtras* CCParallaxNodeExtras::node() {
    return new CCParallaxNodeExtras::CCParallaxNode();
}

void CCParallaxNodeExtras::incrementOffset(cocos2d::CCPoint offset,CCNode *node){
    for( unsigned int i = 0; i < m_pParallaxArray->num; i++) {
        CCPointObject *point = (CCPointObject *)m_pParallaxArray->arr[i];
        CCNode *curNode = point->getChild();
        if( curNode->isEqual(node) ) {
            point->setOffset( ccpAdd(point->getOffset(), offset) );
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请回复,我知道上面有很多代码,但我想知道我是否做错了.任何帮助或建议都将不胜感激.谢谢!

此致,穆罕默德塔希尔阿什拉夫

Nor*_*eno 15

您必须将新cpp文件的引用添加到相应jni目录的Android.mk中.

就我而言,"Android.mk"文件位于路径中:{PROJ_DIRECTORY}\proj.android\jni

编辑此文件,并添加对CCParallaxNodeExtras cpp的引用,如下所示:

LOCAL_SRC_FILES部分中,您目前拥有:

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp
Run Code Online (Sandbox Code Playgroud)

现在包括CCParallasNodeExtras.cpp.它应该如下所示:

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp  \
                   ../../Classes/CCParallaxNodeExtras.cpp
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题.建立并运行.

  • 或者,只需添加`CLASSES_FILES:= $(CLASSES_FILES:$(LOCAL_PATH)/%=%)`然后添加`LOCAL_SRC_FILES + = $(CLASSES_FILES)`永远不必再手动添加.从这里了解到:http://stackoverflow.com/a/20485971/1114457 (4认同)