【发布时间】:2016-05-06 05:54:54
【问题描述】:
我一直在尝试在 C++ 中定义一个错误类。我有三个文件; main.cpp、my_class.h、my_class.cpp。如果我尝试使用下面的代码进行编译,当然,在三个单独的文件中,我会得到 my_exception 的多重定义错误。
请注意,如果我将 my_exception 的整个定义和声明移到 my_class.cpp 中,一切都可以正常编译并正常工作。为什么会这样,我应该怎么写才能将异常的定义放入.h 文件中?还是应该将错误类定义放入.h 文件中?
main.cpp:
#include my_class.h
int main(){
my_class m;
/* stuff */
}
my_class.h:
#ifndef MY_CLASS_H
#define MY_CLASS_H
#include <iostream> //irrelevant for this
#include <exception>
using namespace std;
//taken from http://www.cplusplus.com/doc/tutorial/exceptions/
class my_exception : public exception{
virtual const char* what() throw() { return "message";}
} me_err;
class my_class{
my_class() };
};
#endif // MY_CLASS_H
my_class.cpp:
#include my_class.h
my_class::my_class(){
throw me_err;
}
【问题讨论】:
-
为什么需要全局变量
me_err以及为什么要将 my_exception 与my_class一起定义(在同一个文件中)? -
此外,在所有不会立即触发错误的坏事中,在头文件中包含
using namespace std是最糟糕的情况之一。
标签: c++ class error-handling