编译器就好像没有定义预处理器指令一样

时间:2015-03-21 01:49:45

标签: c++

我有一个头文件及其cpp文件(Error.h,Error.cpp)。 cpp文件执行对预处理程序指令的检查,但它总是失败。

Error.h:

/*
Optional macros:
AE_EXIT_AT_ERROR
AE_CONSOLE_WRITE_AT_ERROR
*/
#pragma once

extern void aeError(const char *str, int code=1);

extern void aeAssert(bool b, const char *failStr = "assertion failed");

Error.cpp:

#include "Error.h"
#include <stdexcept>
#ifdef AE_CONSOLE_WRITE_AT_ERROR
#include <iostream>
#endif

void aeError(const char *str, int code)
{
    #ifdef AE_CONSOLE_WRITE_AT_ERROR
    std::cout << str << std::endl;
    #endif

    throw std::runtime_error(str);

    #ifdef AE_EXIT_AT_ERROR
    std::exit(code);
    #endif
}

void aeAssert(bool b, const char *failStr)
{
    if(!b)
        aeError(failStr);
}

main.cpp中:

//define both macros:
#define AE_CONSOLE_WRITE_AT_ERROR
#define AE_EXIT_AT_ERROR
#include "Error.h"

//rest of code
//...

std::cout << str << std::endl;std::exit(code);都没有编译(我手动“检查”,虽然它们也被IDE标记为灰色,即VS2010)。

这可能是什么原因?

1 个答案:

答案 0 :(得分:7)

main.cppError.cpp是不同的翻译单元。您只为main.cpp定义宏,而不是Error.cpp

您应该将#define指令放在.cpp文件包含的头文件中,或者在项目设置/ makefile中定义这些宏。