zoukankan      html  css  js  c++  java
  • construction const parameter问题 构造函数const引用参数问题

    工程在window下编译没有任何问题, 但是在linux(CentOS6)下编译就老是报错

    C++ 编译器已升级到最新版 6.1.0

    错误如下:

    In file included from /usr/local/include/c++/6.1.0/bits/stl_algobase.h:64:0,
                     from /usr/local/include/c++/6.1.0/bits/char_traits.h:39,
                     from /usr/local/include/c++/6.1.0/string:40,
                     from CTIServer.h:5,
                     from CTIServer.cpp:2:
    /usr/local/include/c++/6.1.0/bits/stl_pair.h: In instantiation of ‘struct std::pair<const std::__cxx11::basic_string<char>, ExtUsrInfo>’:
    CTIServer.cpp:354:15:   required from here
    /usr/local/include/c++/6.1.0/bits/stl_pair.h:224:17: 错误:‘constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = ExtUsrInfo]’被声明为取常量引用,但是隐式声明取非常量引用
           constexpr pair(const pair&) = default;
                     ^~~~
    /usr/local/include/c++/6.1.0/bits/stl_pair.h: In instantiation of ‘struct std::pair<const std::__cxx11::basic_string<char>, Confrence>’:
    CTIServer.cpp:431:60:   required from here
    /usr/local/include/c++/6.1.0/bits/stl_pair.h:224:17: 错误:‘constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = Confrence]’被声明为取常量引用,但是隐式声明取非常量引用
    make: *** [CTIServer.o] 错误 1

     不管怎么改都是报这个错误,

        感觉过不去这个坎了~~~

    错误源代码就是在这一行,中间的不等于表达式:

    for(pos=m_ExtUsrInfoList.begin();pos!=m_ExtUsrInfoList.end();pos++)

     然后 , 因为升级到C++11了嘛,改用 for:auto 方式循环,还是一样这一行报错, 折腾的没门 , 

    于是怀疑C++11的问题?

    于是 找了个 C++没升级的试试,结果如下:

    In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_algobase.h:66,
                     from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/char_traits.h:41,
                     from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/string:42,
                     from CTIServer.h:5,
                     from CTIServer.cpp:2:
    /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _T2 = ExtUsrInfo]’:
    /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:450:   instantiated from ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = ExtUsrInfo, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ExtUsrInfo> >]’
    CTIServer.cpp:340:   instantiated from here
    /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h:84: 错误:对‘ExtUsrInfo::ExtUsrInfo(const ExtUsrInfo&)’的调用没有匹配的函数
    CTIServer.h:56: 附注:备选为: ExtUsrInfo::ExtUsrInfo(ExtUsrInfo*)
    CTIServer.h:55: 附注:        ExtUsrInfo::ExtUsrInfo(ExtUsrInfo&)
    CTIServer.h:54: 附注:        ExtUsrInfo::ExtUsrInfo()

      看到后面

    错误:对‘ExtUsrInfo::ExtUsrInfo(const ExtUsrInfo&)’的调用没有匹配的函数
    CTIServer.h:56: 附注:备选为: ExtUsrInfo::ExtUsrInfo(ExtUsrInfo*)
    CTIServer.h:55: 附注:        ExtUsrInfo::ExtUsrInfo(ExtUsrInfo&)
    CTIServer.h:54: 附注:        ExtUsrInfo::ExtUsrInfo()

    貌似终于发现了点什么, 哈哈, 你妹的, 构造函数没有 参数 是const类型的
    const ExtUsrInfo&
    !!!!

    终于找到了,  但是还得感谢C++4.4.7 版本的 错误提示,  C++11 的错误 还是难看懂!~

    PS:  linux下的 编译检查 要比 window下 的(VS) 严格得多啊!~

  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/lzpong/p/5772742.html
Copyright © 2011-2022 走看看