一个关于结构体的问题

我想请问一下为什么这里的s1会显示不允许使用不完整的类类型呢?

img

直接写 Student s1;

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7695258
  • 除此之外, 这篇博客: C语言字符串常用操作合集中的 如何返回字符串s1的长度? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用函数strlen(s1);

  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    在C++中,编译器会对结构体的成员进行完整类型检查,如果使用了不完整的类类型,编译器会报错。那么什么是不完整的类类型呢?不完整的类类型指的是在使用类的成员变量之前,类的定义还没有完成。在结构体中,如果使用了自身类型的指针或引用,就会导致类类型不完整的问题。

    解决这个问题的方法有两个:

    1. 使用类的指针或引用

    当结构体的成员变量需要使用类类型时,可以将类的指针或引用作为成员变量,而不是直接使用类类型。这样就可以避免类类型不完整的问题。例如:

    class S {
        // 类的定义
    };
    
    struct S1 {
        S* s_ptr; // 使用类的指针
        S& s_ref; // 使用类的引用
    };
    
    1. 将结构体的定义放到类的定义之后

    如果需要在结构体中直接使用类类型的成员变量,可以将结构体的定义放到类的定义之后。这样,结构体就可以在类的定义完成之后才会被使用,避免了类类型不完整的问题。例如:

    class S {
        // 类的定义
    };
    
    struct S1 {
        S s; // 使用类类型
    };
    
    int main() {
        // 使用结构体S1
    }
    

    综上所述,我们可以通过使用类的指针或引用作为结构体的成员变量,或者将结构体的定义放到类的定义之后,来解决在C++中使用结构体时出现的类类型不完整的问题。

你上面和下面的拼写不一样,不是同一个单词,你仔细看看