扩展阅读
  • C++ I/O 成员 bad():如果出现错误则返回true
  • Unmounting initrd failed 错误表示什么错误?可能是由什么引起的?系统原来一直运行正常,突然发现系统登陆错误,重启提示以上错误。
  • C++ I/O 成员 fail():如果出现错误则返回true
  • 在inter版solaris 8上编socket程序,在read时遇到错误,错误号14,用strerror()看不到错误描述,请解决,多谢!
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 请问段错误是什么错误啊
  • Mysql查询错误:ERROR:no query specified原因
  • linux安装codeblock 编译错误make: *** [all-recursive] 错误 1
  • windows server2008上PowerBuilder程序系统错误解决方法
  • 求教:文件打包移植错误发生排序错误,小弟努力送分送分啦!59~~~
  • 几个windows平台C++开发错误举例
  • 解决服务器应用程序不可用,错误:0x80070005拒绝访问的错误
  • 安装hadoop时出现内存不够及其它一些常见的hadoop错误解决办法
  • iis8.5显示ASP的详细错误信息500 内部服务器错误解决方法
  • PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
  • http错误404-文件或目录未找到 错误的解决方法
  • linux/centos安装nginx常见错误及解决办法
  • mysql启动错误之mysql启动报1067错误解决方法
  • gnu c++如何得到对于编译错误和运行错误的帮助?
  • 紧急求救:在LINUX下如何根据错误代码,查出对应的错误描述?
  • jsp有没有检查语法错误的东西,难道只能在改完了在服务器上运行然后才能找到错误吗?
  •  
    当前位置:  编程语言>c/c++

    错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决

     
        发布时间:2013-9-10  


        本文导语:  当出现编译错误:将'const x'作为'x'的'this'实参时丢弃了类型限定 问题时,需要根据源代码来分析原因和寻找解决办法,下面两个实例给出了出现这种错误的两个案例及解决办法,仅供参考。实例一:########## a...

      当出现编译错误:将'const x'作为'x'的'this'实参时丢弃了类型限定 问题时,需要根据源代码分析原因和寻找解决办法,

    下面两个实例给出了出现这种错误的两个案例及解决办法,仅供参考。

    实例一:

    ########## a.h ##########
    class A
    {
    public:
              size_t size()
              {    return size;    }
    private:
               size_t size;
    }


    ##########   main.cpp ########
    #include "stdio.h"
    #include "a.h"
    void print( const A & a)
    {
            cout << a.size() << endl;
    }
    int main(ing argc,char *argv[])
    {
    A a;
    print(a);
    }


    错误:将'const x'作为'x'的'this'实参时丢弃了类型限定。

    解决:这是由于print()传递的是const参数,而A::size()不保证传递的实参不改变,所以报错STL机制问题)。应该吧size()声明为const函数,以保证编译通过。

    size_t size()   函数变为:  size_t size() const  即可。


    实例二

    编译错误: 将'const x'作为'x'的'this'实参时丢弃了类型限定。 这样的错误一般是因为const限定符的问题。如:

    #include <cctype>
    #include <string>
    #include <set>
    #include <iostream>
    using namespace std;
    class A
    {
    public:
        string m_str;
        A(string str){m_str = str;}
        string ToString() {return m_str;}
        bool operator<(const A &rhs) const {return true;} //为了能使用set
    };
    void output(const string &str)
    {
        cout<<str<<endl;
    }
    int main()
    {
        A a("dfsfsd");
        output(a.ToString());
        set<A> strset;
        strset.insert(a);
        output(strset.begin()->ToString());
        return 0;
    }


     在使用g++编译时会出现如下错误:

    test.cpp: In function ‘int main()’:
    test.cpp:28: 错误:将 ‘const A’ 作为 ‘std::string A::ToString()’ 的 ‘this’ 实参时丢弃了类型限定

       出现错误的原因是因为STL在指向set内容时为const类型(是不可更改的),所以strset.begin()其实对应的是一个const A类型,而ToString()方法不能保证这strset.begin()所指向的内容不被改变。因此,应当将此ToString()方法显式声明为const方法,通知编译器此方法不会改变A的内容。修改后的class A:

    class A
    {
    public:
        string m_str;
        A(string str){m_str = str;}
        string ToString() const {return m_str;}
        bool operator<(const A &rhs) const {return true;}
    };


      您可能感兴趣的文章:

    相关文章推荐:


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3