-1

Есть файл Student.h:

#pragma once
#include <iostream>
#include <fstream>
#include <string>

class Student { private: Fio fio; BirthDate birth_date; AdmissionYear admission_year; Faculty faculty; Department department; Group group; StudentBookNumber studentbook_number; Sex sex; public: void getSurname(); void getName(); void getPatronymic(); void getBirthDate(); void getAdmissionYear(); void getFaculty(); void getDepartment(); void getGroup(); void getStudentbookNumber(); void getSex();

void writeStudent();
void printStudent();
int writeIntoFile(string surname_, string name_, string patronymic_, int birth_date_day_,
    int birth_date_month_, int birth_date_year_, int admission_year_,
    string faculty_, string department_, string group_, string studentbook_number_, string sex_);
int readFromFile(int required_number);
void editStudent(Student* student, int student_count);
void deleteStudent(Student* student, int student_count);

};

void Student::getSurname() {...}

void Student::getName() {...}

void Student::getPatronymic() {...}

void Student::getBirthDate() {...}

void Student::getAdmissionYear() {...}

void Student::getFaculty() {...}

void Student::getDepartment() {...}

void Student::getGroup() {...}

void Student::getStudentbookNumber() {...}

void Student::getSex() {...}

void Student::writeStudent() {...}

void Student::printStudent() {...}

int Student::writeIntoFile(string surname_, string name_, string patronymic_, int birth_date_day_, int birth_date_month_, int birth_date_year_, int admission_year_, string faculty_, string department_, string group_, string studentbook_number_, string sex_) {...}

int Student::readFromFile(int requirement_number) {...}

void Student::deleteStudent(Student* student, int student_count) {...}

void Student::editStudent(Student* student, int student_count) {...}

Хочу перенести функции (начиная с getSurname() заканчивая editStudent()) в файл Student.cpp. Перекидываю функции, прописав в начале Student.cpp файла #include "Student.h", но компилятор выдаёт ошибки:

error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl Student::writeStudent(void)" (?writeStudent@Student@@QEAAXXZ) в функции main.
error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl Student::printStudent(void)" (?printStudent@Student@@QEAAXXZ) в функции main.
error LNK2019: ссылка на неразрешенный внешний символ "public: int __cdecl Student::readFromFile(int)" (?readFromFile@Student@@QEAAHH@Z) в функции main.
error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl Student::editStudent(class Student *,int)" (?editStudent@Student@@QEAAXPEAV1@H@Z) в функции main.
error LNK2019: ссылка на неразрешенный внешний символ "public: void __cdecl Student::deleteStudent(class Student *,int)" (?deleteStudent@Student@@QEAAXPEAV1@H@Z) в функции main.
1>C:\Users\username\Desktop\work\x64\Debug\work.exe : fatal error LNK1120: неразрешенных внешних элементов: 5

В main функции вызываю так:

...
student[student_count].writeStudent();
student[i].printStudent();
student[i].readFromFile(i);
student->editStudent(student, student_count);
student->deleteStudent(student, student_count);
...

Как правильно перекинуть функции класса в другой файл?

Если объявлять функции в Student.h, то всё прекрасно работает, а если сделать, как я хочу уже не работает

1 Answers1

0

Вы не добавили Student.cpp в билд. Либо же при линковке не указан Student.o.

Укажите, чем компилируете и как. Используете ли IDE, СMake или ещё что-то?

megorit
  • 1,945
  • Использую Visual Studio 2022. Просто нажимаю "Локальный отладчик Windows" – user553511 May 06 '23 at 07:54
  • Мой совет, не используйте Visual Studio для плюсов. Просто незачем. Посавьте Qt Creator. Если всё таки хотите использовать Visual Studio - используйте вместе с CMake. Добавтьте свой cpp-файл в add_executable – megorit May 06 '23 at 08:13