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