использование метода для члена структуры из глобальной функции в переполнении стека

Я очень плохо знаком с 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 функции и выдает ошибку.

Я потерян здесь. Я пытался использовать очень полные имена областей и все, но он продолжает выдавать ту же ошибку Я не уверен, что происходит, и ошибка кажется очень … расплывчатой.

0

Решение

c_str метод для std::string объекты. Ваш student_name массив символов, поэтому вам не нужно .c_str() в конце.

Тем не менее, вы, вероятно, лучше изменить student_name в std::stringтогда вам не придется беспокоиться о копировании этих символов.

1

Другие решения

Проблема в следующем коде. Вы инициализировали переменные в структуре:

int student_ident = 1234;
double student_gpa = 4.0;

Правильный код должен быть:

int student_ident;
double student_gpa;

Также при печати код должен быть:

std::cout << record.student_name;
0