C++, как объявить структуру в заголовочном файле

Я пытался включать структуру, названную "студентом" в 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" и начинать использовать структуру?

22
задан Eric Leschinski 9 July 2013 в 15:35
поделиться

4 ответа

Не следует размещать директиву using в файле заголовка, это создает ненужную головную боль .

Также вам понадобится включить охранник в заголовок.

РЕДАКТИРОВАТЬ: конечно, после исправления проблемы с включенной защитой вам также потребуется полное объявление ученика в файле заголовка. Как указывали другие, форвардное объявление в вашем случае недостаточно.

19
ответ дан 29 November 2019 в 03:25
поделиться

Ваш файл student.h только вперед объявляет структуру с именем «Студент», но не определяет ее. Этого достаточно, если вы обращаетесь к нему только через ссылку или указатель. Однако, как только вы попытаетесь его использовать (включая создание), вам понадобится полное определение структуры.

Короче говоря, переместите структуру Student {...}; в файл .h и используйте файл .cpp для реализации функций-членов (которых у него нет, поэтому вам не нужен файл .cpp).

17
ответ дан 29 November 2019 в 03:25
поделиться

Попробуйте этот новый источник:

student.h

#include <iostream>

struct Student {
    std::string lastName;
    std::string firstName;
};

student.cpp

#include "student.h"

struct Student student;
26
ответ дан 29 November 2019 в 03:25
поделиться

У вас есть только предварительное объявление для ученика в файле заголовка; вам нужно разместить объявление структуры в файле заголовка, а не в .cpp. Определения методов будут в .cpp (если они у вас есть).

4
ответ дан 29 November 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: