为 cocos2d-x 编译插件时出现 Cpp 错误
Cpp error while compiling a plugin for cocos2d-x
我正在尝试为 cocos2dx 编写一个 Android 插件。但我似乎遇到了一个(基本的?)c++ 障碍。
我遇到了以下错误 - 请参见下文:(shortVersion - "'ProtocolAds' does not name a type.").
make.exe: Entering directory `C:/Android/Cocos2d/cocos2d-x-cocos2d-x-3.6/CocosPr
ojectWoobiDemo/proj.android'
[armeabi] Compile++ thumb: cocos2dcpp_shared <= HelloWorldScene.cpp
[armeabi] StaticLibrary : libcocos2d.a
[armeabi] StaticLibrary : libcocostudio.a
[armeabi] StaticLibrary : libcocosbuilder.a
[armeabi] StaticLibrary : libcocos3d.a
[armeabi] StaticLibrary : libspine.a
[armeabi] StaticLibrary : libnetwork.a
[armeabi] StaticLibrary : libui.a
[armeabi] StaticLibrary : libaudioengine.a
[armeabi] StaticLibrary : libcocosdenshion.a
[armeabi] StaticLibrary : flatbuffers.a
[armeabi] StaticLibrary : libextension.a
[armeabi] StaticLibrary : libcocos2dxinternal.a
[armeabi] StaticLibrary : libbox2d.a
[armeabi] StaticLibrary : libcocos2dandroid.a
[armeabi] StaticLibrary : libcpufeatures.a
[armeabi] Gdbserver : [arm-linux-androideabi-4.9] libs/armeabi/gdbserver
[armeabi] Gdbsetup : libs/armeabi/gdb.setup
jni/../../Classes/HelloWorldScene.cpp: In member function 'void HelloWorld::test
Func()':
jni/../../Classes/HelloWorldScene.cpp:97:24: error: 'ProtocolAds' does not name
a type
_woobi = dynamic_cast<ProtocolAds*>(PluginManager::getInstance()->loadPlugin("
Woobi"));
据我所知,未命名类型是链接器不知道对象的 class(出于任何可能的原因)时出现的错误。
我的想法:
- 错误是"error: 'ProtocolAds' does not name a type"
- 错误发生在包含以下行的 .cpp 文件中:#include "ProtocolAds.h"
- 上述 .cpp 文件的头文件具有相同的行:#include "ProtocolAds.h"。并调用此行:cocos2d::plugin::ProtocolAds* _woobi;而且看起来这个文件没有 ProtocolAds 的问题。 (因为如果我不从 .cpp 文件调用 ProtocolAds,.h 编译和链接没有错误)
这怎么可能?我一直在阅读和尝试大量时间,但没有成功。有人可以帮忙吗?
您似乎应该将它与命名空间说明符一起使用:dynamic_cast<cocos2d::plugin::ProtocolAds*>
似乎将以下两行添加到 header 作品中:
--#include "PluginManager.h"
使用命名空间 cocos2d::plugin;
对于非 cpp 开发人员来说,此命名空间的使用并不简单。
考虑到这些文件在预编译库中,你怎么知道 ProtocolAds.h 在 cocos2d::plugin 的命名空间中?
我怀疑它会不会,但希望这至少能帮助我以外的一个人。
我正在尝试为 cocos2dx 编写一个 Android 插件。但我似乎遇到了一个(基本的?)c++ 障碍。 我遇到了以下错误 - 请参见下文:(shortVersion - "'ProtocolAds' does not name a type.").
make.exe: Entering directory `C:/Android/Cocos2d/cocos2d-x-cocos2d-x-3.6/CocosPr
ojectWoobiDemo/proj.android'
[armeabi] Compile++ thumb: cocos2dcpp_shared <= HelloWorldScene.cpp
[armeabi] StaticLibrary : libcocos2d.a
[armeabi] StaticLibrary : libcocostudio.a
[armeabi] StaticLibrary : libcocosbuilder.a
[armeabi] StaticLibrary : libcocos3d.a
[armeabi] StaticLibrary : libspine.a
[armeabi] StaticLibrary : libnetwork.a
[armeabi] StaticLibrary : libui.a
[armeabi] StaticLibrary : libaudioengine.a
[armeabi] StaticLibrary : libcocosdenshion.a
[armeabi] StaticLibrary : flatbuffers.a
[armeabi] StaticLibrary : libextension.a
[armeabi] StaticLibrary : libcocos2dxinternal.a
[armeabi] StaticLibrary : libbox2d.a
[armeabi] StaticLibrary : libcocos2dandroid.a
[armeabi] StaticLibrary : libcpufeatures.a
[armeabi] Gdbserver : [arm-linux-androideabi-4.9] libs/armeabi/gdbserver
[armeabi] Gdbsetup : libs/armeabi/gdb.setup
jni/../../Classes/HelloWorldScene.cpp: In member function 'void HelloWorld::test
Func()':
jni/../../Classes/HelloWorldScene.cpp:97:24: error: 'ProtocolAds' does not name
a type
_woobi = dynamic_cast<ProtocolAds*>(PluginManager::getInstance()->loadPlugin("
Woobi"));
据我所知,未命名类型是链接器不知道对象的 class(出于任何可能的原因)时出现的错误。
我的想法:
- 错误是"error: 'ProtocolAds' does not name a type"
- 错误发生在包含以下行的 .cpp 文件中:#include "ProtocolAds.h"
- 上述 .cpp 文件的头文件具有相同的行:#include "ProtocolAds.h"。并调用此行:cocos2d::plugin::ProtocolAds* _woobi;而且看起来这个文件没有 ProtocolAds 的问题。 (因为如果我不从 .cpp 文件调用 ProtocolAds,.h 编译和链接没有错误)
这怎么可能?我一直在阅读和尝试大量时间,但没有成功。有人可以帮忙吗?
您似乎应该将它与命名空间说明符一起使用:dynamic_cast<cocos2d::plugin::ProtocolAds*>
似乎将以下两行添加到 header 作品中:
--#include "PluginManager.h" 使用命名空间 cocos2d::plugin;
对于非 cpp 开发人员来说,此命名空间的使用并不简单。 考虑到这些文件在预编译库中,你怎么知道 ProtocolAds.h 在 cocos2d::plugin 的命名空间中?
我怀疑它会不会,但希望这至少能帮助我以外的一个人。