Quick v3.3 自定义类 给 lua 报错,到底是那里出错了,都是按照官方推荐的教程弄的。

跪求官网指条明路,实在是找到解决办法,看见网上也有相同的问题,但是都不能解决我的问题,本人对C 不太懂,但公司必须要用C 写一些东西让lua 去调用,

下载都是按照README.md 去下载的

系统 win7 64

第一个图的前7条错误都可以忽略,主要是第8条,是你自己的文件有问题,已经提示了错误位置了,请检查一下

// CustomClass.h
#ifndef __CUSTOM__CLASS
#define __CUSTOM__CLASS
#include “cocos2d.h”
namespace cocos2d {
class CustomClass : public cocos2d::Ref
{
public:CustomClass();
~CustomClass();
static cocos2d::CustomClass* create();
bool init();
CREATE_FUNC(CustomClass);//这里是第8条错误,如果注释掉,用VS2013编译会报一堆错误
};
} //namespace cocos2d
#endif

教程地址 是 :http://cn.cocos2d-x.org/article/index?type=wiki&url=/doc/cocos-docs-master/manual/framework/native/wiki/how-to-use-bindings-generator/zh.md

这个例子看来有点问题。

CREATE_FUNC(CustomClass);
这一句实际上已经是在定义create函数了。

所以前面那句
static cocos2d::CustomClass* create();
这句可以去掉,要不然就象报错信息所说,是重复定义了。

删除 static cocos2d::CustomClass* create(); 可以成功生成 .hpp and .cpp 文件

【【【【【【【【使用 VS2013 编译报错】】】】】】】】

操作步骤:
1.生成 .hpp 与 .cpp 文件
2.编译的时候 找不到 头文件 提示 No such file or directory ,后来 我更改为绝对路径 没有 提示 No such file or directory ,然后重新编译,就报以下错误。。

5>libluacocos2d.lib(lua_cocos2dx_custom.obj) : error LNK2019: 无法解析的外部符号 “public: __thiscall cocos2d::CustomClass::CustomClass(void)” (??0CustomClass@cocos2d@@QAE@XZ),该符号在函数 “int __cdecl lua_cocos2dx_custom_CustomClass_constructor(struct lua_State *)” (?lua_cocos2dx_custom_CustomClass_constructor@@YAHPAUlua_State@@@Z) 中被引用
5>libluacocos2d.lib(lua_cocos2dx_custom.obj) : error LNK2019: 无法解析的外部符号 “public: bool __thiscall cocos2d::CustomClass::init(void)” (?init@CustomClass@cocos2d@@QAE_NXZ),该符号在函数 “int __cdecl lua_cocos2dx_custom_CustomClass_init(struct lua_State *)” (?lua_cocos2dx_custom_CustomClass_init@@YAHPAUlua_State@@@Z) 中被引用
5>D:\quick-3.3rc1\quick\poker13\frameworks\runtime-src\proj.win32…/…/…/runtime/win32/poker13.exe : fatal error LNK1120: 2 个无法解析的外部命令

删除 static cocos2d::CustomClass* create(); 可以成功生成 .hpp and .cpp 文件

【【【【【【【【使用 VS2013 编译报错】】】】】】】】

操作步骤:
1.生成 .hpp 与 .cpp 文件
2.编译的时候 找不到 头文件 提示 No such file or directory ,后来 我更改为绝对路径 没有 提示 No such file or directory ,然后重新编译,就报以下错误。。

5>libluacocos2d.lib(lua_cocos2dx_custom.obj) : error LNK2019: 无法解析的外部符号 “public: __thiscall cocos2d::CustomClass::CustomClass(void)” (??0CustomClass@cocos2d@@QAE@XZ),该符号在函数 “int __cdecl lua_cocos2dx_custom_CustomClass_constructor(struct lua_State *)” (?lua_cocos2dx_custom_CustomClass_constructor@@YAHPAUlua_State@@@Z) 中被引用
5>libluacocos2d.lib(lua_cocos2dx_custom.obj) : error LNK2019: 无法解析的外部符号 “public: bool __thiscall cocos2d::CustomClass::init(void)” (?init@CustomClass@cocos2d@@QAE_NXZ),该符号在函数 “int __cdecl lua_cocos2dx_custom_CustomClass_init(struct lua_State *)” (?lua_cocos2dx_custom_CustomClass_init@@YAHPAUlua_State@@@Z) 中被引用
5>D:\quick-3.3rc1\quick\poker13\frameworks\runtime-src\proj.win32…/…/…/runtime/win32/poker13.exe : fatal error LNK1120: 2 个无法解析的外部命令

例子里的头文件只定义了类的函数而没有实现,本来应该有一个CustomClass.cpp来实现这些函数才对的。你没注意看文档有这么一句吧:“注意:为了保持页面短而干净,我们省略了cpp文件和bindings-generator只扫描头文件。”

简单点修改,把它们直接定义在头文件里吧:

public:

CustomClass() { };

~CustomClass() { };

bool init() {return true};

CREATE_FUNC(CustomClass);

现在 头文件 是这样,生成.hpp 与 .cpp 这一行 bool init() {return true}; 会报错

// CustomClass.h
#ifndef __CUSTOM__CLASS
#define __CUSTOM__CLASS
#include “cocos2d.h”
namespace cocos2d {
class CustomClass : public cocos2d::Ref
{
public:CustomClass() { };
~CustomClass() { };
bool init() {return true};
CREATE_FUNC(CustomClass);
};
} //namespace cocos2d
#endif // __CUSTOM__CLASS

bool init() {return true;};

我漏写了个分号,你补一下嘛…看来你真的一点C基础都没有啊,这还只是例子,后面真正加模块时你可怎么办哦…

感谢了,按照你说的已经成功调用了。。。