с++ Перенос функций класса в отдельный файл

Рейтинг: -1Ответов: 1Опубликовано: 06.05.2023

Есть файл 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, то всё прекрасно работает, а если сделать, как я хочу уже не работает

Ответы

▲ 0

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

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