[英]C++ Exceptions and handling
我是用c ++编写异常的新手,并且正为错误而苦苦挣扎。 我不会详细介绍,因为我认为这与我所遇到的问题无关。
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <string>
#include <map>
#include <vector>
#include <stdexcept>
#include <iostream>
class NoMarkException: public exception
{
public: NoMarkException():exception(){
cout<< "No marks were found." << endl;
}/*
NoMarkException(const string &name){
cout << "No marks for " << name << " were found."<< endl;
}*/
};
#endif
这是我的NoMarkException类
float Student::getMaxMark() const throw(NoMarkException) {
if (marks.empty()) {
throw NoMarkException::NoMarkException();
}
float final = 0;
for (it = marks.begin(); it != marks.end(); it++) {
if ((*it).second > final) {
final = (*it).second;
}
}
return final;
}
这是我的Student.cpp
当我构建项目时,我得到错误消息:无法直接调用构造函数'NoMarkException :: NoMarkException'为什么会导致此问题?
if (marks.empty()) {
throw NoMarkException();
}
您得到的错误实际上与您使用异常类无关。 问题是您试图通过显式调用(默认)构造函数NoMarkException::NoMarkException()
来实例化NoMarkException
类的对象。 在C ++中,您不会显式调用构造函数。 而是在定义新变量时,将调用适当的构造函数。 例如
void foo() {
std::vector<int> v(5);
NoMarkException my_exception();
NoMarkException my_other_exception();
}
或者,由于最近的语言更改,使用等效但更合适的方法:
void foo() {
std::vector<int> v { 5 };
NoMarkException my_exception { };
NoMarkException my_other_exception { };
}
在这种情况下(两种语法都可以),构造函数将:
std::vector<int>::vector(std::vector<int>::size_type count)
NoMarkException::NoMarkException()
NoMarkException::NoMarkException()
叫做 (*)。
在您的情况下,您只需要用NoMarkException
对象的实例NoMarkException
对throw
对NoMarkException::NoMarkException()
的显式调用,即您的语句将是:
throw NoMarkException();
(*)-实际上,被调用的向量构造函数还有更多的参数,这些参数采用其默认值。 看这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.