【问题标题】:What does this error mean? (errorC2678) and how do I fix my code?这个错误是什么意思? (errorC2678)以及如何修复我的代码?
【发布时间】:2015-07-15 20:47:41
【问题描述】:

我这里的 bool 方法应该是检查保存为私有对象“sudoku_”的多维向量中的字符“-”。如果找到“-”,则返回 true,否则返回 false。这真的很简单,所以我不知道为什么会出现这个错误:

“错误 C2678: 二进制 '==' : 未找到采用 'std::vector>' 类型的左侧操作数的运算符(或没有可接受的转换)”

这是我的代码:

bool Grid::checkiffull(){

 string selement = "-";

 if (find(sudoku_.begin(), sudoku_.end(), selement) != sudoku_.end())
      return true;
 else
      return false;
}

编辑:

这是私有对象的定义:

vector<vector<string>> sudoku_;

错误显然在“xutility”文件第 3026 行:

template<class _InIt,
class _Ty> inline
_InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val, false_type)
{   // find first matching _Val
for (; _First != _Last; ++_First)
    if (*_First == _Val)
        break;
return (_First);
}

【问题讨论】:

  • 你能说明sudoku_的定义吗?
  • 去掉不相关的,添加相关的...
  • 编译器错误消息的好处是它们包含错误所在的行号。我猜你的错误行号不在你显示的代码中的任何地方,主要是因为你显示的代码在任何地方都没有== 运算符。
  • 注意:你的return语句对是一个反模式,你可以直接返回表达式的结果。
  • @JoachimPileborg:我认为它有:你还会如何实现find? :)

标签: c++ class methods vector boolean


【解决方案1】:

问题是你的变量是一个字符串向量的向量:

vector<vector<string>> sudoku_;

当您调用 find 时,您正在搜索 string,因此您应该在简单的 vector&lt;string&gt; 上调用它,而不是在嵌套数据类型上调用它。

所以你必须首先在“外部”向量中找到正确的项目,然后你才能在“内部”向量上使用你的代码。

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多