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) 严格得多啊!~

  • 相关阅读:
    《python核心编程第二版》第8章习题
    《python核心编程第二版》第7章习题
    虚拟Ip技术如何实现备机容灾
    LeetCode算法编程连载之五
    GIT使用入门篇(管理自已的代码)
    LeetCode算法编程之连载四(二分法)
    LeetCode算法编程之连载三
    LeetCode算法编程之连载二
    LeetCode算法编程之连载一
    Python 使用flush函数将缓冲区数据立即写磁盘
  • 原文地址:https://www.cnblogs.com/lzpong/p/5772742.html
Copyright © 2011-2022 走看看