Виртуальные функции
описал класс вот так
#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;
};