【问题标题】:‘internalPath’ (type ‘std::string {aka std::basic_string<char>}’) to type ‘std::basic_string<char>&&’‘internalPath’(输入‘std::string {aka std::basic_string<char>}’)输入‘std::basic_string<char>&&’
【发布时间】:2015-04-28 22:11:39
【问题描述】:

我在函数的代码行下面运行

string internalPath(os.str());
   m_tags.insert(make_pair<string, TagConfig >(internalPath, tagConfig ));
error: no matching function for call to ‘make_pair(std::string&, const wicom::TagConfig&)’
m_tags.insert(make_pair<string, TagConfig >(internalPath, tagConfig ));
                                                                    ^

编译器 g++=C++14

【问题讨论】:

    标签: c++ string c++11 gcc


    【解决方案1】:

    您永远不应该为std::make_pair 明确指定模板参数——它旨在推断它们,因为它使用完美转发。要么摆脱它们:

    m_tags.insert(make_pair(internalPath, tagConfig ));
    

    或者如果您需要明确指定它们,请直接使用std::pair

    m_tags.insert(pair<string, TagConfig >(internalPath, tagConfig ));
    

    作为旁注,您似乎拥有using namespace std;某处。我建议你摆脱它,它比其他任何东西都更令人困惑。

    【讨论】:

    • @trideceth12 “它用于推断它们,因为它使用完美转发。”如果您明确指定它们,它就无法推断它们以进行完美转发。使用std::pairstd::make_pair 之间的唯一 区别在于您是否指定模板参数。如果您想明确指定它们,请使用std::pair
    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多