我收到了错误
error: expected primary-expression before ';' token
Run Code Online (Sandbox Code Playgroud)
当我尝试编译以下代码时.问题是什么?
#include <iostream>
#include <stdexcept>
#include <exception>
using namespace std;
class MyException : public std::invalid_argument{};
int main() {
try {
throw MyException; //here is the problem
}
catch (...){
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我也试过这段代码
#include <iostream>
#include <stdexcept>
#include <exception>
using namespace std;
class MyException : public std::invalid_argument{};
int main() {
try {
throw MyException(); //here is the problem
}
catch (...){
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但后来又出现了另一个错误
main.cpp: In constructor ‘MyException::MyException()’:
main.cpp:6:7: error: no matching function for call to ‘std::invalid_argument::invalid_argument()’
main.cpp:6:7: note: candidates are:
In file included from main.cpp:2:0:
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/stdexcept:86:14: note: std::invalid_argument::invalid_argument(const string&)
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/stdexcept:86:14: note: candidate expects 1 argument, 0 provided
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/stdexcept:83:9: note: std::invalid_argument::invalid_argument(const std::invalid_argument&)
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/stdexcept:83:9: note: candidate expects 1 argument, 0 provided
main.cpp: In function ‘int main()’:
main.cpp:10:27: note: synthesized method ‘MyException::MyException()’ first required here
Run Code Online (Sandbox Code Playgroud)
您需要创建一个要抛出的实际对象:
throw MyException();
Run Code Online (Sandbox Code Playgroud)
没有括号MyException只是类型,它不会创建对象.
MyException是类的名称,而不是对象.您必须在throw期间创建类的新实例,如下所示:
throw MyException();
Run Code Online (Sandbox Code Playgroud)
或抛出以前定义的类版本,如下所示:
myException except;
throw except;
Run Code Online (Sandbox Code Playgroud)
请注意,在这个示例中,第二个选项是愚蠢的,因为它创建了一个毫无意义的临时选项,但是在更复杂的情况下可能很有用(也就是说,如果您在MyException类中有值和/或方法).
有几个问题;
std::invalid_argument没有默认构造函数,需要传递一个字符串.()换句话说,就像这样;
class MyException : public std::invalid_argument {
public:
MyException(const std::string& message) : std::invalid_argument(message) {}
};
int main() {
try {
throw MyException("bop"); //here is the problem
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5153 次 |
| 最近记录: |