为C+定义错误类+; 我一直试图在C++中定义一个错误类。我有三个档案main.cpp,my_class.h,my_class.cpp。如果我尝试使用下面的代码进行编译,当然,所有代码都在三个单独的文件中,我会得到一个多定义错误my_exception
请注意,如果我将为C+定义错误类+; 我一直试图在C++中定义一个错误类。我有三个档案main.cpp,my_class.h,my_class.cpp。如果我尝试使用下面的代码进行编译,当然,所有代码都在三个单独的文件中,我会得到一个多定义错误my_exception,c++,class,error-handling,C++,Class,Error Handling,请注意,如果我将my_exception的整个定义和声明移动到my_class.cpp中,那么一切都可以正常编译。为什么会这样,我应该如何编写,以便将异常的定义放入.h文件?或者我甚至应该将错误类定义放入.h文件中 main.cpp: #include my_class.h int main(){ my_class m; /* stuff */ } #include my_class.h my_class::my_class(){ throw me_err; }
my_exception
的整个定义和声明移动到my_class.cpp
中,那么一切都可以正常编译。为什么会这样,我应该如何编写,以便将异常的定义放入.h
文件?或者我甚至应该将错误类定义放入.h
文件中
main.cpp
:
#include my_class.h
int main(){
my_class m;
/* stuff */
}
#include my_class.h
my_class::my_class(){
throw me_err;
}
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
您遇到的问题是在头文件中创建了一个全局变量。编译
main.cpp
和my_class.cpp
时,它们中的每一个现在都具有相同的全局变量。要解决此问题,您可以使me\u err
成为my\u类的成员,因为这就是使用它的原因
编辑:
正如您所指出的,您可以完全摆脱me\u err
,只需使用抛出my\u异常代码>您遇到的问题是在头文件中创建了一个全局变量。编译main.cpp
和my_class.cpp
时,它们中的每一个现在都具有相同的全局变量。要解决此问题,您可以使me\u err
成为my\u类的成员,因为这就是使用它的原因
编辑:
正如您所指出的,您可以完全摆脱me\u err
,只需使用抛出my\u异常
为什么需要全局变量me\u err
,为什么要将my\u异常与my\u class
一起定义(在同一个文件中)?此外,对于所有不会立即触发错误的错误,在头文件中使用命名空间std
是最糟糕的情况之一。为什么需要全局变量me\u err
,为什么要将my\u异常与my\u class
一起定义(在同一个文件中)?此外,在所有不会立即触发错误的错误中,在头文件中使用名称空间std
是最糟糕的情况之一。是否需要存在me\u err
?为什么不直接抛出我的异常代码>?me\u err
是否需要存在?为什么不直接抛出我的异常代码>?