c++ - 没有要调用的匹配函数(构造函数),候选函数的不同之处在于它是对给定类型的引用

标签 c++ constructor

我的编译器以下列方式提示:

Matrix.cpp:58: error: no matching function for call to ‘List::miterator::miterator(List::miterator)’
List.h:99: note: candidates are: List::miterator::miterator(List::miterator&)
List.h:98: note:                 List::miterator::miterator(List::Node*, Dim)
List.h:97: note:                 List::miterator::miterator(Dim)

我有继承自 List 的类 List 和类 Matrix。类 miterator 放置在类 List 中。第 58 行说:

miterator i( nula(ROW) );

并放在里面:

Matrix Matrix::operator*( const Matrix& right ) const

矩阵是稀疏的,List是一个二维环。 nula 方法返回给定维度中第一个边缘哨兵的迭代器。维度在全局定义为:

typedef enum { ROW, COL } Dim;
Dim operator!(Dim dim) { return dim == COL ? ROW : COL; }

列表的节点在列表中定义并包含以下字段:

private:
    unsigned index[2];
    T num;
public:
    Node *next[2];

我很感激任何帮助,我不知道哪里出了问题。请记住,我是初学者 C++ 程序员。提前致谢。

编辑: 这也可能有帮助。从 miterator 定义的内部:

    miterator( Dim dir ) { direction_flag = dir; }
    miterator( Node *n, Dim dir ) { node = n; memory = n; direction_flag = dir; }
    miterator( miterator &i ) { node = i.node; memory = i.memory; direction_flag = i.direction_flag; }
    ~miterator() {}
    inline bool operator==( const miterator& i) const { return node == i.node; }
    inline bool operator!=( const miterator& i) const { return node != i.node; }
    inline miterator& operator=( const miterator i ) { node = i.node; memory = i.memory; return *this; }

最佳答案

List::miterator::miterator(List::miterator&)

应该是

List::miterator::miterator(List::miterator const&)

临时(nula(ROW) 在你的情况下)不能绑定(bind)到非 const 引用。要么更改构造函数(推荐),要么不使用临时构造函数。

nula n(ROW);
miterator i(n);

关于c++ - 没有要调用的匹配函数(构造函数),候选函数的不同之处在于它是对给定类型的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617154/

相关文章:

java - 如何对图的节点进行排序,使两个相邻节点之间的距离最小

c++ - 将互斥量与 shared_ptr 结合使用以保护跨拷贝共享的数据

c++ - 在没有 friend 的情况下授予对私有(private)构造函数的访问权限?

c++ - C++ 中的私有(private)构造函数

Java - 扩展似乎正在调用其他类的构造函数

c++ - 我们可以在C++代码中使用Coremotion之类的iOS框架吗

c++ - 如何将 Eigen FFT 与 MatrixXf 一起使用?

c# - 使用反射实例化类而不运行其构造函数

c++ - 第一个 C++ 类(class),对某些事情不确定。特别是“const std::string& 提示

c++ - SFINAE 和 noexcept 说明符