时空逆转vip 2023-02-18 14:23 采纳率: 50%
浏览 28
已结题

C/C++结构体嵌套声明问题

版本:VS2019
#include<string>
#include<iostream>
using namespace std;

struct Teacher 
{
    string tname;
    struct Student Sarr[5];
};

struct Student
{
    string sname;
    int score;
};

报错:“Teacher::Sarr”使用未定义的 struct“Student”
提问:如何将Teacher结构体写在Student结构体的上面,并且不报错?结构体有没有类似函数体的那种写在最前面的声明语句。
  • 写回答

3条回答 默认 最新

  • Evaporator Core 2023-02-18 14:31
    关注

    在 C++ 中,对于结构体的成员函数,可以采用先声明后定义的方式,以实现结构体成员函数写在结构体定义的上面。
    但是在结构体内部的成员变量,不支持先声明后定义的方式。因此,如果要在 Teacher 结构体中使用 Student 结构体,需要在 Teacher 结构体定义的前面添加一个结构体声明,例如:

    struct Student; // 先声明 Student 结构体
     
    struct Teacher 
    {
        string tname;
        struct Student Sarr[5];
    };
     
    struct Student
    {
        string sname;
        int score;
    };
    

    这样,在定义 Teacher 结构体时,就可以使用 Student 结构体了。同时,注意要把 Student 结构体定义在 Teacher 结构体的前面,否则还是会报错。
    另外,结构体内部的成员变量的定义顺序,对于结构体大小和内存布局都有影响,所以一般按照自然顺序来定义。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 修改了问题 2月18日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析