传递实参时丢弃类型限定的原因
2012-07-14 20:39
537 查看
编译错误:
将'const xxx'作为'xxx'的'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;}
};
将'const xxx'作为'xxx'的'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;}
};
相关文章推荐
- 传递实参时 丢弃了类型限定
- 实参时丢弃了类型限定 原因
- 将'const xxx'作为'xxx'的'this'实参时丢弃了类型限定
- 将'const xxx'作为'xxx'的'this'实参时丢弃了类型限定
- 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
- c++中实参作为对象值传递给形参时,原对象出现乱码的原因
- gcc 报 初始化丢弃了指针目标类型的限定 的警告信息
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
- 实参时丢弃了类型 discards qualifiers
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
- opencv Mat 类型数据传递,出现访问冲突,有解决方法,但不知原因
- 实参时丢弃了类型 discards qualifiers discards qualifiers问题
- 基础概念 :形参/实参,值类型/引用类型,值传递/引用传递,==/equals
- 实参时丢弃了类型 discards qualifiers discards qualifiers问题
- Android Parceable传递复杂类型数据
- string类型在参数传递中如何作为引用,如何在函数外修改函数内的string类型
- 基本数据类型和引用数据类型参数的传递
- 函数传参类型:按值传递,按引用传递,按共享传递
- 函数中实参到形参的传递
- C语言——类型限定词