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

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 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题