叫我学弟 2020-10-27 22:15 采纳率: 0%
浏览 1439

c++结构体初始化报错“应输入表达式”

最近研究用c++开发Python的库,按照教程,需要给一个结构体赋值,代码如下:

static PyTypeObject Student_Class = {
    PyVarObject_HEAD_INIT(NULL, 0)
        .tp_name = "python_class.Student",
        .tp_itemsize = sizeof(Student),
        .tp_dealloc = (destructor)Student_Destruct,
        .tp_str = (reprfunc)Student_str,
        .tp_flags = Py_TPFLAGS_BASETYPE|Py_TPFLAGS_DEFAULT,
        .tp_doc = "Student类",
        .tp_methods = student_method_def,
        .tp_members = Student_Member,
        .tp_init = (initproc)Student_init,
        .tp_new = Student_new,
};

其中的PyTypeObject结构体是一个很大很大很大很大很大的结构体,由Python那边的头文件定义完毕。
在c++下面,貌似用句点来定义个别属性是不支持的么?vs2019编译器报错E0029:应输入表达式。
而转为c语言方式就不会报错,但转为c语言之后上面的代码:

static PyMemberDef Student_Member[] = {
    {"name", T_OBJECT_EX, offsetof(Student, name), 0, "姓名"},
    {"age", T_INT, offsetof(Student, age), 0, "年龄"},
    {"sex", T_OBJECT_EX, offsetof(Student, sex), 0, "性别"},
    {"id", T_FLOAT, offsetof(Student, id), 0, "学号"},
    {NULL},
};

里面的offsetof会报错“表达式必须含有常量值”,但按照python官方教程,这样写并没有错。难道是编译器的问题吗?

求大佬解答。

  • 写回答

2条回答 默认 最新

  • wlj1234 2020-10-28 16:04
    关注

    VS2015中我测试没啥问题

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀