c/c++语言开发共享初始化程序不是常量,错误C2099,编译用c编写的用于python的模块

我试图编译一个名为distance的python模块,在Windows 10上使用msvc 2017编译“python setup.py install –with-c”,我收到此错误,

Cdistance / distance.c(647):错误C2099:初始化器不是常量

Cdistance / distance.c(689):错误C2099:初始化器不是常量

错误:命令’C: Program Files(x86) Microsoft Visual Studio 2017 BuildTools VC Tools MSVC 14.10.25017 bin HostX64 x64 cl .exe’失败,退出状态为2

这是第647行的代码

646 PyTypeObject IFastComp_Type = { 647 PyVarObject_HEAD_INIT(&PyType_Type, 0) 648 "distance.ifast_comp", /* tp_name */ 649 sizeof(ItorState), /* tp_basicsize */ 650 0, /* tp_itemsize */ (destructor)itor_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ ifast_comp_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ (iternextfunc)ifastcomp_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ PyType_GenericAlloc, /* tp_alloc */ ifastcomp_new, /* tp_new */ }; 

在689行是另一个像结构,

 688 PyTypeObject ILevenshtein_Type = { 689 PyVarObject_HEAD_INIT(&PyType_Type, 0) "distance.ilevenshtein", /* tp_name */ sizeof(ItorState), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)itor_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 

两者在同一页面中引用如下

 762 if (PyType_Ready(&IFastComp_Type) != 0 || PyType_Ready(&ILevenshtein_Type)!= 0) 763 #if PY_MAJOR_VERSION >= 3 return NULL; #else return; #endif Py_INCREF((PyObject *)&IFastComp_Type); Py_INCREF((PyObject *)&ILevenshtein_Type); 

谢谢

    我已经找到了解决方案,通过查看结构yVarObject_HEAD_INIT(&PyType_Type, 0)的定义,我已经通过PyVarObject_HEAD_INIT(NULL, 0)更改了yVarObject_HEAD_INIT(&PyType_Type, 0) PyVarObject_HEAD_INIT(NULL, 0)并且它成功编译,并且我尝试了一些函数并且它可以工作,所以错误是由&PyType_Type引起的&PyType_Type它是一个PyObject* ,我知道因为IFastComp_Type是一个全局变量,它应该由一个constante初始化,但我仍然不知道为什么模块的作者给出了&PyType_Type作为参数,谢谢大家你的评论。

    请参阅“定义新类型”的文档 。

     PyVarObject_HEAD_INIT(NULL, 0) 

    这条线有点疣; 我们想写的是:

    PyVarObject_HEAD_INIT(&PyType_Type, 0)

    因为类型对象的类型是“类型”,但这并不严格符合C并且一些编译器抱怨。 幸运的是, PyType_Ready()将为我们填写此成员。

    我认为Visual C是抱怨的编译器,模块是用GCC编写和测试的……

      以上就是c/c++开发分享初始化程序不是常量,错误C2099,编译用c编写的用于python的模块相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522917.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐