我正在尝试实现一个通用矩阵,我的代码中每个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
}
我还包括..
谢谢大家!
答案 0 :(得分:0)
std::domain_error
在<stdexcept>
中声明。
您的Matrix.hpp
使用此符号而不#include
此必需的头文件。因此,除非翻译单元恰好包含它,否则尝试包含Matrix.hpp
将导致此编译错误。
答案 1 :(得分:0)
班级std::domain_error
在标题<stdexcept>
中定义。