【问题标题】:Getting an error in C++ using vector and struct使用向量和结构在 C++ 中出错
【发布时间】:2018-09-10 13:38:29
【问题描述】:

这段代码有什么错误:

    #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct symtab{
  string name;
  string location;
};
vector<symtab> symtab_details;

bool search_symtab(string s){

  if (find (symtab_details.begin(), symtab_details.end(), s)!=symtab_details.end()) return true;
  return false;
}


int main() {

    bool get = search_symtab("ADD");
    return 0;
}

我收到以下错误:

usr/include/c++/4.8.2/bits/stl_algo.h:166:17: 错误:'operator==' 不匹配(操作数类型是'symtab' 和'const std::basic_string') if (*__first == __val)

【问题讨论】:

  • find 函数试图在你的向量中找到一个symtab 结构。了解 lambda expressionsstd::find_if 了解解决问题的一种方法。
  • 在符号表类中重载 operator== 以便可以将其与 const std::string & 进行比较
  • 错误很明显。如果您不明白为什么这是一个错误,请在提出有关它的问题之前阅读有关运算符重载的更多信息,因为它是该语言的一个非常基本的特性。

标签: c++ algorithm vector struct


【解决方案1】:

代码正在搜索与std::string 类型的对象匹配的symtab 类型的对象。所以你必须提供一个比较运算符来判断一个特定的symtab 对象是否等于一个特定的std::string 对象。你需要

bool operator==(const symtab&, const std::string&);

如果您仔细阅读错误消息,这就是它告诉您的内容。

【讨论】:

    【解决方案2】:

    您正在尝试在std::vector&lt;symtab&gt; 中查找std::string"ADD"。这当然行不通。

    你需要的是std::find_if

    auto it = std::find_if(symtab_details.begin(),
                           symtab_details.end(),
                           [&s](symtab const& item) { return item.name == s; });
    return  (it != symtab_details.end());
    

    【讨论】:

    • @Debian_yadav,您需要使用 C++11 编译器进行编译。例如。如果你使用g++,你可以在命令行中使用-std=c++11将你的程序编译为C++11程序。
    • 我正在使用 g++ 编译器
    • @Debian_yadav,然后使用-std=c++11
    • 但是我在 gcc 中有链接器问题
    • @Debian_yadav,这是我的错字。使用g++ -std=c++11
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2014-02-27
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多