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

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 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题
  • ¥20 基于matlab的航迹融合 航迹关联 航迹插补