C++ Boost-Python签名不匹配问题
我得到了一个与python公开的方法不匹配的签名。下面是代码C++ Boost-Python签名不匹配问题,c++,python,boost-python,C++,Python,Boost Python,我得到了一个与python公开的方法不匹配的签名。下面是代码 class StatusEffect { public: //Virtual functions and non related ommitted void AddCancellation(std::string &effect) { CancelsEffects.insert(effect); } } StatusEffect中有一些虚拟方法我想在python脚本中重写,所以我创建了一
class StatusEffect
{
public:
//Virtual functions and non related ommitted
void AddCancellation(std::string &effect)
{
CancelsEffects.insert(effect);
}
}
StatusEffect中有一些虚拟方法我想在python脚本中重写,所以我创建了一个类包装器。包装器不会以任何方式覆盖或更改AddCancellation,我只是简单地将其显示给mark
struct StatusEffectWrapper : Game::StatusEffects::StatusEffect
{
//Wrappings for virtual functions here. I don't touch AddCancellation
}
我将其公开给python,如下所示:
class_<StatusEffects::StatusEffect, boost::noncopyable, std::auto_ptr<StatusEffectWrapper> >("StatusEffect")
.def("AddCancellation", &StatusEffect::AddCancellation)
;
但是,当我这样做时,我会得到以下错误:
Poison
Traceback (most recent call last):
File "..\..\..\Resources\Scripts\StatusEffects.py", line 27, in <module>
Regen = StatCreepEffect("Regen", Stat.HP, 0.05, "Regenerates a small amount
of HP every turn", PrimaryEngine.GetUID(), 14, 4, True, True, StatusCategories.S
C_Regen, 0, StatusFlags.TickEffect, True, StatusPersistence.SP_Timer_Cure, ["Poi
son", "Poison-"])
File "..\..\..\Resources\Scripts\StatusEffects.py", line 11, in __init__
self.PushCancellations(cancels)
File "..\..\..\Resources\Scripts\StatusEffects.py", line 23, in PushCancellati
ons
self.AddCancellation(cancel)
Boost.Python.ArgumentError: Python argument types in
StatusEffect.AddCancellation(StatCreepEffect, str)
did not match C++ signature:
AddCancellation(class Game::StatusEffects::StatusEffect {lvalue}, class std:
:basic_string<char,struct std::char_traits<char>,class std::allocator<char> > {l
value})
毒药
回溯(最近一次呼叫最后一次):
文件“.\..\..\Resources\Scripts\StatusEffects.py”,第27行,在
Regen=StatCreepEffect(“Regen”,Stat.HP,0.05,“再生少量
“HP每转一圈”,PrimaryEngine.GetUID(),14,4,True,True,StatusCategories.S
C_Regen,0,StatusFlags.ticeffect,True,StatusPersistence.SP_Timer_Cure,[“Poi
儿子“,”毒药-“])
文件“.\..\Resources\Scripts\StatusEffects.py”,第11行,在初始化中__
自助推送取消(取消)
文件“.\..\..\Resources\Scripts\StatusEffects.py”,第23行,PushCancellati格式
ons
自动添加取消(取消)
ArgumentError:中的Python参数类型
StatusEffect.AddCancellation(StatCreepEffect,str)
与C++签名不匹配:
AddCancellation(类游戏::状态效果::状态效果{lvalue},类标准:
:basic_字符串{l
值})
我不完全确定问题出在哪里。StatCreepEffect应该是StatusEffect的一个实例,不是吗?python会自动处理字符串的转换,不是吗?我调用的方法有误吗?我觉得这是我错过的一件小事,但我不确定它是什么。任何帮助都将不胜感激。我认为问题可能在于Boost。Python并不完全理解StatusEffectWrapper是从StatusEffect派生的。除非您指定保留类型是出于某种原因,否则我会尝试将类指定为:
class_<StatusEffects::StatusEffectWrapper, boost::noncopyable>("StatusEffect")
.def("AddCancellation", &StatusEffectWrapper::AddCancellation)
;
类(“状态效应”)
.def(“AddCancellation”,&StatusEffectWrapper::AddCancellation)
;
我认为问题可能在于Boost。Python并不完全理解StatusEffectWrapper是从StatusEffect派生的。除非您指定保留类型是出于某种原因,否则我会尝试将类指定为:
class_<StatusEffects::StatusEffectWrapper, boost::noncopyable>("StatusEffect")
.def("AddCancellation", &StatusEffectWrapper::AddCancellation)
;
类(“状态效应”)
.def(“AddCancellation”,&StatusEffectWrapper::AddCancellation)
;
结果我需要
void AddCancellation(std::string &effect)
{
CancelsEffects.insert(effect);
}
作为
结果我需要
void AddCancellation(std::string &effect)
{
CancelsEffects.insert(effect);
}
作为