C++ Shedskin编译错误

C++ Shedskin编译错误,c++,python,converter,shedskin,C++,Python,Converter,Shedskin,我目前正试图用shedskin编译一个python项目(5files@total 1200行代码) 我试过shedskin版本0.9.3和0.9.2都会导致相同的错误。 这是我遇到的第一个错误: mmain.cpp: In function ‘__shedskin__::list<__shedskin__::list<int>*>* __mmain__::list_comp_3(__shedskin__::__ss_int)’: mmain.cpp:133: error:

我目前正试图用shedskin编译一个python项目(5files@total 1200行代码)

我试过shedskin版本0.9.3和0.9.2都会导致相同的错误。 这是我遇到的第一个错误:

mmain.cpp: In function ‘__shedskin__::list<__shedskin__::list<int>*>* __mmain__::list_comp_3(__shedskin__::__ss_int)’:
mmain.cpp:133: error: no matching function for call to ‘__shedskin__::list<__shedskin__::list<int>*>::append(__shedskin__::list<double>*)’
然而,shedskin似乎可以完美地使用提供的示例,因为我可以编译和执行它们,而不会出现任何错误

您是否知道在哪里查找错误或错误与什么有关

mmain.cpp:133: error: no matching function for call to ‘__shedskin__::list<__shedskin__::list<int>*>::append(__shedskin__::list<double>*)’
但是,从它上面的行中,函数名是
list\u comp\u 3
。除非您实际命名了一个函数
list\u comp\u 3
(您没有),否则这是一个列表理解。因此,您可能正在做这样的事情:

a = [1, 2, 3.0]
b = [[i] for i in a]
您可能想知道为什么它可以让您避开
a
,但在
b
上却失败了。好吧,首先,如果你有几十个警告你还没有处理,它可能真的没有让你逃脱惩罚。但第二,正如文件所说:

整数和浮点数通常可以混合,但最好尽可能避免这种情况,因为这可能会混淆:

a=[1.0]

a=#错误-在这里也使用浮点数

至于警告,它们可能意味着从“这次你侥幸逃脱了,但不要期望总是这样做”到“出现了与此相关的错误”,到“这将编译,但效率低于原始Python代码,而不是更高”,到“这将编译,但不正确”


更一般地说,shedskin的推理机似乎无法静态键入您的程序。在没有实际查看代码的情况下,不可能告诉您做错了什么,但是如果您重新阅读了的“类型限制”和“Python子集限制”部分,您将了解哪些是合适的,哪些是不合适的。

为了避免混淆,请注意,“abartert”提供的两个代码段在单独编译时都可以正常编译和运行(shedskin 0.9.3)。我的猜测是,在解决动态键入警告后,问题应该会消失。如果不是的话,我会非常有兴趣看到你正在试图编译的程序,或者至少有足够的程序来重现这个问题


更新:顺便说一句,从0.9.1左右开始,shedskin应该更聪明地处理int和float混合。如果遇到一些会导致损坏或低效的C++代码(因为需要进行各种类型的运行时转换),它现在通常会抱怨“不兼容类型”警告。因此,也许是时候为0.9.3稍微更新文档的这一部分了。

错误消息与在“指向int的指针”列表中添加“指向double的指针”有关。这是在Python代码还是C++代码中?你能给我们看看Python警告的一些代码吗?谢谢。这为我指明了正确的方向。我预先分配了一个包含整数的列表,然后用a类的instances来填充它。我目前正在尝试解决这个问题。如果您想了解有关如何解决此问题的更多信息,请查看。
a = [[1], [2]]
b = 1.0
a.append([b])
a = [1, 2, 3.0]
b = [[i] for i in a]