(C++) 错误: 'invalid_argument' 在此作用域中未声明

5
我正在使用带有MinGW编译器的Eclipse C/C++。在项目属性的C/C++ Build下,我已将标志-std=c++11添加到Miscellaneous GCC C Compiler Settings中。我知道这可能是一个简单的问题,但我无法解决这个错误。
日期.h
#include <iostream>
using namespace std;

class Date {
public:
    Date(int m = 1, int d = 1, int y = 1900);
    void setDate(int, int, int);
private:
    int month;
    int day;
    int year;

    static const int days[];
};

Date.cpp

#include <iostream>
#include <string>
#include "Date.h"
using namespace std;

const int Date::days[] = {
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

Date::Date(int month, int day, int year){
    setDate(month, day, year);
}

void Date::setDate(int month, int day, int year){
    if (month >= 1 && month <= 12){
        this->month = month;
    } else {
        // error
        invalid_argument("month must be within the range [0, 12]");
    }
    ...
}

编译器消息:

..\Date.cpp: In member function 'void Date::setDate(int, int, int)':
..\Date.cpp:25:60: error: 'invalid_argument' was not declared in this scope
   invalid_argument("month must be within the range [0, 12]");
1个回答

19

std::invalid_argument 定义在头文件 <stdexcept> 中,需要包含它。

您可能还意味着要 throw 该对象而不仅仅是构造它:

throw invalid_argument("month must be within the range [1, 12]");

我有一个类似的问题,即throw std::invalid_argument("")会报错,提示invalid_argument不是'std'的成员,尽管已经包含了stdexcept。甚至我的IDE也认为invald_argument存在,并且我可以在stdexcept头文件中看到它的定义。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接