编译时的C ++交换定义

时间:2018-11-25 21:49:13

标签: c++ g++ clang

我有一个看起来像这样的目录:

.
├── 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,这将在学生定义中的Weather的默认构造函数中捕获一个错误。我想对该构造函数(最后是announce进行单元测试,所以我想对所有{strong>除了 solution构造函数使用student符号。

我希望能够在编译时完成此工作,也就是在编译之前,我希望studentsolution源/头文件都完全相同(除了它们的定义不同)。 / p>

我试图使用g ++ -D标志使其工作,但没有成功。

1 个答案:

答案 0 :(得分:0)

在这种情况下,使用编译时定义的问题是您需要使用测试预处理器标志来使学生解决方案混乱。相反,为什么不重命名解决方案类中的方法,以便测试文件可以准确地调用它想要的内容。如果您的解决方案班和学生班都实现了相同的虚拟方法,则您的测试班可以同时调用两者。