aicups
aicups copied to clipboard
C++ ошибка компиляции при попытке вынести код в отдельный cpp файл
Создал простой strategy.cpp файл
#include "strategy.h"
void Strategy::on_tick(std::vector<Elevator>& myElevators, std::vector<Passenger>& myPassengers, std::vector<Elevator>& enemyElevators, std::vector<Passenger>& enemyPassengers) {
}
В pro файле: SOURCES += main.cpp core/strategy.cpp получаю ошибку компиляции:
https://pastebin.com/tTvEg0zW
Тут соль в том, что Debug
определён в api.h
, но сам api.h
подключает strategy.h
- циклическая зависимость, типа. Я чинил примерно так (файл strategy.h
, с cpp
не заморачивался):
#pragma once
#include <vector>
class Elevator;
class Passenger;
class Debug;
#include "base_strategy.h"
class Strategy : public BaseStrategy
{
public:
inline void on_tick(std::vector<Elevator>&, std::vector<Passenger>&,
std::vector<Elevator>&, std::vector<Passenger>&);
};
#include "api.h"
template <typename T> void BaseStrategy::debug(T smth)
{
debugPtr->log(smth);
}
void Strategy::on_tick(std::vector<Elevator>&, std::vector<Passenger>&,
std::vector<Elevator>&, std::vector<Passenger>&)
{
// код стратегии
}
и в base_strategy.h
стирал тело у BaseStrategy::debug
.
Правда, против #11 это всё не помогло, но хотя бы локально компилилось.
Было бы неплохо разбить api.h на описание объектов типа пассажира/лифта, которые непосредственно требуются для стратегий, и на всё остальное (API_Elevators вынести вместе с инклудом strategy.h).
У меня по этой же причине не получается делать пары .h/.cpp, которые инклудят api.h.
Оставил пулл-реквест #62
@678098 Есть ощущение, что в пулл-реквесте забыто добавление нового хедера в переменную HEADERS
в pro
-файле (чтобы moc
по нему тоже проходился).
А вообще язамёрж 😄