在c++中使用全局函数的struct成员的方法

using method on member of struct from global function in C++

本文关键字:struct 成员 方法 函数 全局 c++      更新时间:2023-10-16

我对c++很陌生,我总是在这里和那里遇到一些小问题。最近的一次似乎是一个结构体的问题。

struct student_record{
student_record(std::string name, int ident, double gpa){
    for (int i = 0; i < name.length(); i++){
        student_name[i] = name[i];
        student_name[i + 1] = NULL;
    }
    student_ident = ident;
    student_gpa = gpa;
}
//constructor to initialize student_record
static const unsigned int MAX_NAME_LENGTH = 21;
char student_name[MAX_NAME_LENGTH];
int student_ident = 1234;
double student_gpa = 4.0;
};

我想用函数"print_student"打印出这个学生的名字

void print_student(const student_record record){
std::cout << "Student name: ";
std::cout << record.student_name.c_str();
std::cout << std::endl;
std::cout << "  Student ID: " << record.student_ident << std::endl;
std::cout << "         GPA: " << record.student_gpa << std::endl;
}

我得到错误"智能感知:表达式必须有类类型"编译器错误提示".c_str的左边必须有class/struct/union。"record"在函数的第3行用红色下划线标出,并给出了错误。

我迷路了。我尝试使用非常完整的作用域名称和一切,但它一直给出相同的错误。我不确定发生了什么,错误似乎非常……模糊。

c_str方法用于std::string对象。您的student_name是一个字符数组,因此您不需要在末尾使用.c_str()

然而,你最好把student_name改成std::string,这样你就不用担心所有的字符复制了

问题出在下面的代码。你已经初始化了结构体中的变量:

int student_ident = 1234;
double student_gpa = 4.0;
正确的代码应该是:
int student_ident;
double student_gpa;

同时在打印代码时应该:

std::cout << record.student_name;