我一直试图在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;
}
答案 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