2401_87058999 2024-09-24 18:35 采纳率: 66.7%
浏览 0
已结题

指针结构体报错,地址无法传入

指针地址传不过去,报错没看懂,初学找不出错误,希望能得到解答,谢谢🙏

img

img

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-24 18:37
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你提供的代码片段和错误信息,问题出现在printTea(&tea)这一函数调用上。这里的错误提示是关于类型转换的问题,具体来说就是无法将&teateacher*类型转换为teacher类型。你的函数printTea接收的是一个指向teacher类型的指针,但你试图传入一个变量的地址,这在语法上是错误的。在C++中,当你使用&运算符时,会得到一个指向变量的指针,而你的函数期望的是一个指向teacher类型的指针。因此,你需要传递一个指针到函数中去。这是修改后的代码示例:

    假设你的结构体定义如下:

    struct student {
        string name;
        int age;
        int score;
    };
    
    struct teacher {
        string name;
        int id;
        student stu; // 或者定义为学生结构体指针,如student* stu;
    };
    

    你的主函数部分应该是这样的:

    int main() {
        teacher tea; // 创建teacher对象tea
        tea.name = "老王"; // 填充tea的数据
        tea.id = 100; // 其他数据填充略...
        printTea(&tea); // 这里传递的是tea的地址,即指向teacher类型的指针
        return 0; // 注意这里的return语句应该是完整的语句,而不是返回类型后的分号。
    }
    

    你的printTea函数定义是正确的:

    void printTea (const teacher *a) { // 定义接收指向teacher类型的指针的函数printTea
        cout << a->name << a->id << a->stu.name << a->stu.age << a->stu.score << endl; // 输出信息
    }
    

    在代码编译和运行时遇到的其他语法错误或问题也应该同时得到解决。另外,请注意函数声明和定义之间不应该有空行注释或其他无关内容。确保你的代码结构清晰,遵循正确的语法规则。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月24日