叫我学弟 2020-10-28 10:06 采纳率: 0%
浏览 228

C代码报错C7556:不能将指定初始值设定项与非指定初始值设定项混合

有这样一段C代码,用来开发python模块:

typedef struct
{
    PyObject_HEAD
    PyObject* name;
    int age;
    PyObject* sex;
    float id;
}Student;
static PyTypeObject Student_Class = {
     PyVarObject_HEAD_INIT(NULL, 0)
    .tp_name = "python_class.Student",
    .tp_doc = "student类",
    .tp_basicsize = sizeof(Student),
    .tp_itemsize = 0,
    .tp_dealloc = (destructor)Student_Destruct,
    .tp_str = (reprfunc)Student_str,
    .tp_flags = Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DEFAULT,
    .tp_methods = student_method_def,
    .tp_members = Student_Member,
    .tp_init = (initproc)Student_init,
    .tp_new = Student_new,
};

报错PyVarObject_HEAD_INIT(NULL, 0)处C7556 不能将指定初始值设定项与非指定初始值设定项混合;

.tp_basicsize = sizeof(Student),处:E2904 C++ 中的无序初始化表达式不标准

.tp_name = "python_class.Student",处:E2903 在 C++ 中将指定和非指定的初始化表达式混搭是非标准操作

这些报错是为啥呢,我这是c的代码,为啥呢,求解答

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-24 22:54
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这些报错是因为您正在使用C++的编译器编译C代码,而C++对某些C语法的使用有一些限制。这些报错的原因如下:
    1. PyVarObject_HEAD_INIT(NULL, 0)报错:在C++中不能将指定初始值设定项与非指定初始值设定项混合。解决方法是将PyVarObject_HEAD_INIT(NULL, 0)替换为PyVarObject_HEAD_INIT(NULL, 0)。
    2. .tp_basicsize = sizeof(Student)报错:C++中的无序初始化表达式不标准。解决方法是将代码改为结构体的初始化方式:
    static PyTypeObject Student_Class = {
        PyObject_VAR_HEAD_INIT(NULL, 0)
        "python_class.Student",  /* tp_name */
        sizeof(Student),         /* tp_basicsize */
        0,                       /* tp_itemsize */
        (destructor)Student_Destruct, /* tp_dealloc */
        (printfunc)Student_str,        /* tp_str */
        0,                       /* tp_flags */
        0,                       /* tp_doc */
        0,                       /* tp_traverse */
        0,                       /* tp_clear */
        0,                       /* tp_richcompare */
        0,                       /* tp_weaklistoffset */
        0,                       /* tp_iter */
        0,                       /* 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 */
        (initproc)Student_init,  /* tp_init */
        0,                       /* tp_alloc */
        Student_new,             /* tp_new */
    };
    
    1. .tp_name = "python_class.Student"报错:在C++中将指定和非指定的初始化表达式混搭是非标准操作。解决方法是将.tp_name的赋值放在结构体初始化中。 请将上述修改后的代码尝试运行,应该不会再出现这些报错。
    评论

报告相同问题?