我有一个头文件及其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)。
这可能是什么原因?
答案 0 :(得分:7)
main.cpp
和Error.cpp
是不同的翻译单元。您只为main.cpp
定义宏,而不是Error.cpp
。
您应该将#define
指令放在.cpp文件包含的头文件中,或者在项目设置/ makefile中定义这些宏。