Я пытался включать структуру, названную "студентом" в a student.h
файл, но я не совсем уверен, как сделать это.
Мой student.h
код файла состоит из полностью:
#include<string>
using namespace std;
struct Student;
в то время как student.cpp
файл состоит из полностью:
#include<string>
using namespace std;
struct Student {
string lastName, firstName;
//long list of other strings... just strings though
};
К сожалению, файлы то использование #include "student.h"
придуманный многочисленные ошибки как
error C2027: use of undefined type 'Student'
error C2079: 'newStudent' uses undefined struct 'Student' (where newStudent is a function with a `Student` parameter)
error C2228: left of '.lastName' must have class/struct/union
Кажется, что компилятор (VC ++) не распознает Студента структуры из "student.h"?
Как я могу объявить Студента структуры в "student.h" так, чтобы я мог просто #include "student.h" и начинать использовать структуру?
Не следует размещать директиву using
в файле заголовка, это создает ненужную головную боль .
Также вам понадобится включить охранник в заголовок.
РЕДАКТИРОВАТЬ: конечно, после исправления проблемы с включенной защитой вам также потребуется полное объявление ученика в файле заголовка. Как указывали другие, форвардное объявление в вашем случае недостаточно.
Ваш файл student.h только вперед объявляет структуру с именем «Студент», но не определяет ее. Этого достаточно, если вы обращаетесь к нему только через ссылку или указатель. Однако, как только вы попытаетесь его использовать (включая создание), вам понадобится полное определение структуры.
Короче говоря, переместите структуру Student {...}; в файл .h и используйте файл .cpp для реализации функций-членов (которых у него нет, поэтому вам не нужен файл .cpp).
Попробуйте этот новый источник:
#include <iostream>
struct Student {
std::string lastName;
std::string firstName;
};
#include "student.h"
struct Student student;
У вас есть только предварительное объявление для ученика
в файле заголовка; вам нужно разместить объявление структуры в файле заголовка, а не в .cpp. Определения методов будут в .cpp (если они у вас есть).