• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱
欢迎来到 behaviac Q&A。 您在bbs里的问题,管理员会当下就收到通知,不要担心管理员看不到您的问题。也请在bbs里提供您的email,这样就可以第一时间收到关于回答,评论的email的通知了。 为了节省大家的时间,请表达好你的问题,提供必要上下文,版本号,平台信息,重现步骤等。

好的 那在请问下,相关的类,我可以写在自己到命名空间里么,编译时候报错,删掉命名空间就又可以了

0 喜欢 0 不喜欢
83 浏览
最新提问 10月 31, 2016 用户: 神兵小龙 (320 分)

1个回答

0 喜欢 0 不喜欢
 
已采纳
加了自己的命名空间,需要把注册的地方也加上自己的命名空间,自动生成代码的地方目前不会生成命名空间,后续3.6.0版本会改进
最新回答 10月 31, 2016 用户: cainhuang (33,950 分)
采纳于 10月 31, 2016 用户:神兵小龙
behaviac::Agent::Register<Charles_TankBattle_Framework::Tank>();
behaviac::Agent::RegisterInstanceName<Charles_TankBattle_Framework::Tank>("Tank", L"Tank", L"tank");

 

类的声明里头元信息定义部分和这两句都加上了命名空间,可还是抱这个错,

 

behaviac/base/dynamictype.h:459:116: error: specialization of ‘template<class T> const char* behaviac::GetClassTypeName(T*)’ in different namespace [-fpermissive]
   template <> inline const char* GetClassTypeName< typeFullClassNameWithNamespace >(typeFullClassNameWithNamespace*){ return #typeName; }  \

在.h文件中申明该类的地方也需要加上命名空间,如下所示:

DECLARE_BEHAVIAC_AGENT(TestNS::AgentArrayAccessTest, behaviac::Agent);
都加了 但还是报这个错,挺苦恼的


#ifndef TANKBATTLECPPS_TANK_H
#define TANKBATTLECPPS_TANK_H

#include <iostream>
#include "behaviac/behaviac.h"

namespace Charles_TankBattle_Framework {
    using namespace behaviac;

    class Tank : public behaviac::Agent {
    public:

    DECLARE_BEHAVIAC_AGENT(Charles_TankBattle_Framework::Tank, behaviac::Agent);
        Tank();
        virtual ~Tank();

        int inId;
        int posX;
        int posY;
        int hp;

    private:
        int ai;
        int attack;
        int angle ;
        int distance ;
        Tank *aim;

        EBTStatus MoveToPos(Tank *_tank);

        EBTStatus AimToPos(Tank *_tank);

        EBTStatus Fire(Tank *_tank, int test);

        EBTStatus Die();
    };
    BEHAVIAC_DECLARE_TYPE_VECTOR_HANDLER(Charles_TankBattle_Framework::Tank*);
};
#endif //TANKBATTLECPPS_TANK_H

找到原因了 因为加了这句话

BEHAVIAC_DECLARE_TYPE_VECTOR_HANDLER(Charles_TankBattle_Framework::Tank*);

把这句话去掉,就可以成功编译了!

请问这句话是什么作用,我看编辑器导出的h中会带有这句话?

BEHAVIAC_DECLARE_TYPE_VECTOR_HANDLER要放在namespace外!

 

image

哦哦  还真没注意   谢谢!!
...