Виртуальные функции

описал класс вот так

#pragma once
#include "Port.h"

class Factory {
public:
    virtual ~Factory() {}
    virtual Port* create_ship() = 0;
};

При этом выдается ошибка: Ошибка C2143 синтаксическая ошибка: отсутствие ";" перед "*" KR C:\Users\Nikita\source\repos\KR\KR\Factory.h 7 Ошибка C2433 Factory::Port: "virtual" не разрешается для объявлений данных KR C:\Users\Nikita\source\repos\KR\KR\Factory.h 7
Ошибка C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию KR C:\Users\Nikita\source\repos\KR\KR\Factory.h 7

Класс Port Путь к файлу Port.h - C:\Users\Nikita\source\repos\KR\KR

#pragma once
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
#include "Factory.h"

using namespace std;

class Port {
    vector<Port*> ships;

protected:
    string type;            //Тип
    string ship_class;      //Класс корабля
    string special_term;    //Специальное назначение
    string sailing_area;    //Район плавания
    string power_plant;     //Энергетическая установка


    int dimensions[3];      //Габариты (длина, ширина, высота)
    int displacement;       //Водоизмещение
    int capacity;           //Вместимость
    int team;               //Экипаж
    int passengers;         //Пассажиры
    int speed[2];           //Скорость

public:
    //Функции ввода данных
    void enter_ship_class();
    void enter_special_term();
    void enter_sailing_area();
    void enter_power_plant();
    void enter_dimensions();
    void enter_displacement();
    void enter_capacity();
    void enter_team();
    void enter_passengers();
    void enter_speed();

    //Добваление кораблей
    void add_ship(Factory& factory);

    //Удаление кораблей
    void delete_ship();

    //Функция вывода данных о кораблях
    void display_ships_data();

    //Редактирование данных
    void change_ships_data();

    //Запись в файл
    void write_file();
};

В чем прикол?


Ответы (1 шт):

Автор решения: AlexGlebe

У вас инклуды циклически заходят друг в друга. В вашем случае надо сделать предварительное объявление класса.

#pragma once
//#include "Port.h"

class Port ;

class Factory {
public:
    virtual ~Factory() {}
    virtual Port* create_ship() = 0;
};
→ Ссылка