为C ++定义错误类

时间:2016-01-28 17:54:31

标签: c++ class error-handling

我一直试图在C ++中定义一个错误类。我有三个文件; main.cppmy_class.hmy_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; 
}

1 个答案:

答案 0 :(得分:5)

您遇到的问题是您在头文件中创建了一个全局变量。编译stopWatch.stop(); long milliseconds = stopWatch.getTime(); int seconds = (int) ((milliseconds / 1000) % 60); int minutes = (int) ((milliseconds / 1000) / 60); main.cpp时,每个人现在都拥有相同的全局变量。要解决此问题,您可以使my_class.cpp成为me_err的成员,因为这就是使用它。

编辑:

正如Fred Larson指出的那样,您可以完全摆脱my_class并使用me_err