'定义域'在命名空间' std'没有命名类型

时间:2016-09-17 14:30:56

标签: c++ exception matrix operator-overloading generic-programming

我正在尝试实现一个通用矩阵,我的代码中每个decleration of domain_error都出错了。

错误:

Matrix.h:31:60: error: 'domain_error' in namespace 'std' does not name a type
     Matrix operator+(const Matrix &other) const throw(std::domain_error);

 Matrix<T> Matrix<T>::operator+(const Matrix &other) const throw(std::domain_error)
                                                                      ^
Matrix.hpp:94:27: error: 'domain_error' in namespace 'std' does not name a type
             } catch (std::domain_error e)
                           ^
Matrix.hpp:96:23: error: 'e' was not declared in this scope
                 throw e;
                       ^

例如运营商&#39; +&#39;:

Matrix.h:

#include <exception>
#include <vector>
#include <iostream>
#include <cstdlib>
typedef typename std::vector<T> genericVector;

Matrix operator+(const Matrix &other) const throw(std::domain_error);

Matrix.hpp:

template<class T>

Matrix<T> Matrix<T>::operator+(const Matrix &other) const throw(std::domain_error)
{
    if (!compareSize(*this, other)) // check if matricies have the same dimensions
    {
        throw std::domain_error(
                "illegal use of operator '+' on matrices with different dimensions.");
    }

    genericVector temp; // initialize a new vector<T>
    for (unsigned int i = 0; i < _rows; ++i)
    {
        for (unsigned int j = 0; j < _cols; ++j)
        {
            try
            {
                temp.push_back(_cells[_cols * i + j] + other(i, j)); // sum matricies to vector
            } catch (std::domain_error e) // if thrown domain error..
            {
                throw e;
            }
        }
    }

    return Matrix(_rows, _cols, temp); // return the sum of matrices
}

我还包括..

谢谢大家!

2 个答案:

答案 0 :(得分:0)

std::domain_error<stdexcept>中声明。

您的Matrix.hpp使用此符号而不#include此必需的头文件。因此,除非翻译单元恰好包含它,否则尝试包含Matrix.hpp将导致此编译错误。

答案 1 :(得分:0)

班级std::domain_error在标题<stdexcept>中定义。