aicups icon indicating copy to clipboard operation
aicups copied to clipboard

C++ ошибка компиляции при попытке вынести код в отдельный cpp файл

Open ud1 opened this issue 7 years ago • 3 comments

Создал простой 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

ud1 avatar Sep 16 '17 14:09 ud1

Тут соль в том, что 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 это всё не помогло, но хотя бы локально компилилось.

lockie avatar Sep 16 '17 15:09 lockie

Было бы неплохо разбить api.h на описание объектов типа пассажира/лифта, которые непосредственно требуются для стратегий, и на всё остальное (API_Elevators вынести вместе с инклудом strategy.h).

У меня по этой же причине не получается делать пары .h/.cpp, которые инклудят api.h.

Оставил пулл-реквест #62

678098 avatar Sep 22 '17 00:09 678098

@678098 Есть ощущение, что в пулл-реквесте забыто добавление нового хедера в переменную HEADERS в pro-файле (чтобы moc по нему тоже проходился).

А вообще язамёрж 😄

lockie avatar Sep 22 '17 06:09 lockie