0

我对 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;
}

我收到错误“Intellisense:表达式必须具有类类型”编译器错误说“.c_str 的左侧必须具有类/结构/联合”。“记录”在函数的第 3 行中带有红色下划线并给出了错误。

我在这里迷路了。我尝试使用非常完整的范围名称和所有内容,但它一直给出相同的错误。我不确定发生了什么,错误似乎非常......模糊。

4

2 回答 2

1

c_str方法适用于std::string对象。你student_name是一个字符数组,所以你最后不需要.c_str()

但是,您最好更改student_namestd::string,这样您就不必担心所有的字符复制。

于 2015-06-07T06:00:01.783 回答
0

问题在于以下代码。您已初始化结构中的变量:

int student_ident = 1234;
double student_gpa = 4.0;

正确的代码应该是:

int student_ident;
double student_gpa;

此外,在打印代码时应该是:

std::cout << record.student_name;
于 2015-06-07T06:01:36.137 回答