当前位置: 首页 > 知识库问答 >
问题:

第一个参数没有从“const value_type”到“const void*”的已知转换

柳景胜
2023-03-14

我试图使用std::cout打印一组对,但它没有编译。我在Xcode9上使用C++14。错误发生在cout<<(*it);

错误:二进制表达式(“ostream”(又名“basic_ostream”)和“const value_type”(又名“const std::__1::pair”)的操作数无效)

#include <iostream>
#include <set>
#include <map>
using namespace std;

template <class P, class Q> ostream& operator<<(ostream &out, pair<P,Q>& p)
{
    cout<<"["<<p.first<<","<<p.second<<"]";
    return out;
}

template <class T> ostream& operator<<(ostream &out, set<T> &S)
{
    cout<<"{";
    for(typename set<T>::iterator it = S.begin(); it != S.end(); it++) {
        cout<<(*it);   //Error occurs here
        if(next(it,1) != S.end()) cout<<",";
    }
    cout<<"}";
    return out;
}

int main() {
    set<pair<int,int>> s;
    s.insert({1,2});
    cout<<s;
    return 0;
}

共有1个答案

许兴文
2023-03-14

std::set的迭代器是一个常量双向迭代器(至少从C++11开始)。因此,它的取消引用会导致对set元素/键的恒定引用(您不能直接修改set键,这是有意义的,因为它会破坏底层的数据结构--通常是某种形式的搜索树)。此引用表示常量lvalue参数,该参数不能绑定到非常量引用类型的参数(运算符<<中的P)。正如其他人已经建议的那样,改为使用const引用作为参数。

 类似资料:
  • 这是我正在使用的扫线算法的C++代码。我正在使用HeapSort对点进行排序。但我得到以下2个错误: 第214行:字符5:错误:调用“堆排序”没有匹配函数 第134行:字符6:注意:候选函数不可行:第一个参数没有已知的从“segment[2]”到“int*”的转换 void heapSort(int arr[],int n) 产生1个错误。 我不知道为什么它会抛出两个错误。

  • 想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 我有一个A类像: 现在还有另一类X,例如: 现在,ClassY和ClassB是一样的,就像: 我想将A的实例复制到Y的新对象中。 我遇到过做类似映射的推土机,但那是如果值是原始的。我不知道如何映射它们中的类。尝试用java实现这一点。 我偶然发现了答案https://stackoverflow.com/a/36196948/2733350

  • 我正在尝试创建restful API(使用Spring Boot v2.0.0.Release),我希望有一个endpoint,但我希望有两种可能的用途: 首先,这可能吗?其次,有人有代码示例吗? 非常感谢你的帮助

  • 我正在使用Android中的Speech认知器和识别器来实现语音识别。我的目标是在我的语音识别器在屏幕上显示结果后重新开始听语音。为此,我使用以下代码。 问题是,第一次运行正常并显示结果,但在第二次开始侦听(从onResults方法调用)后,由于某种原因,它听不到正在说的内容。然后它给出一个ERROR\u SPEECH\u TIMEOUT错误,这意味着没有语音输入。在Logcat上,我可以看到它进

  • 问题内容: 更新我和我之后,我会收到此类警告。我已经尝试过这些,但是没有用,每个建议都会受到赞赏。 问题答案: 我尝试过这些,它为我解决了同样的问题,只需将它们放在您的代码顶部

  • 请帮助我理解以下问题: 从 https://alligator.io/vuejs/common-gotchas/ “您不能直接向根数据对象添加新属性,但可以使用”: Vue.set(this.data, “道具名称”, 值) Vue.set(this.$data,'lastAddedName','John Elway'); 但是 Vue.set() 上面的方法中的第一个参数:“this.data”