C ++ Swap определения во время компиляции - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть каталог, который выглядит следующим образом:

.
├── makefile
├── solution
│   ├── weather.cpp
│   └── weather.h
├── student
│   ├── weather.cpp
│   └── weather.h
└── tests
    └── test_Weather_Weather.cpp

solution / weather.h

#ifndef _WEATHER_H_
#define _WEATHER_H_

#include <string>
using namespace std;

class Weather {
    private:
        int temp;

    public:
        Weather();
        string announce();
};

#endif

solution / weather.cpp

#include <iostream>
#include "weather.h"

using namespace std;

Weather::Weather() {
    temp = 0;
}

string Weather::announce() {
    if (temp <= 0) {
        return "It's freezing!";

    } else {
        return "It's hot!";
    }
}

ЧтоЯ пытаюсь добиться того, чтобы я хотел скомпилировать и запустить test_Weather_Weather.cpp, что уловит ошибку в конструкторе погоды по умолчанию в определении студента.Я хочу провести модульное тестирование этого конструктора (и, в конечном итоге, announce), поэтому я хочу использовать символы solution для всего , кроме конструктора student.

Я хочу бытьв состоянии сделать это во время компиляции, то есть перед компиляцией, я хочу, чтобы оба файла student и solution source / header были абсолютно одинаковыми (за исключением различий в их определениях).

Я пытался получить егоработать с использованием флага g ++ -D, но я потерпел неудачу.

1 Ответ

0 голосов
/ 26 ноября 2018

Проблема с использованием времени компиляции определяет в этом случае, что вам нужно будет загромождать решение студента флагами тестового препроцессора.Вместо этого, почему бы не переименовать методы в вашем классе решений, чтобы тестовый файл мог вызывать именно то, что ему нужно.Если и ваш класс решения, и класс студента реализуют одни и те же виртуальные методы, ваш тестовый класс может вызывать оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...