使用指针访问cpp中的私有值
由于某些原因,getter方法不起作用。 他们是公开的,所以我不知道什么是错的。
for (std::vector<Document>:: const_iterator it = v.begin(); it != v.end(); ++it)
{
cout << it->getName() << endl;
counter += it->getLength();
}
错误:将'const Document'作为'void'的参数传递给'void Document :: getName()'放弃限定符[-fpermissive] cout << it-> getName()<< endl;
错误:'operator <<'不匹配(操作数类型是'std :: ostream {aka std :: basic_ostream}'和'void')cout << it-> getName()<< endl;
错误:将'const Document'传递给'void Document :: getLength()'的'this'参数丢弃限定符[-fpermissive] counter + = it-> getLength();
错误:类型'int'和'void'的无效操作数到二进制'operator +'counter + = it-> getLength();
嗯,有没有办法我们可以做(int) (it->getLength())
为最后一个问题
我们可以为另一个做:
std::ostringstream value;
value << (*it).getName();
cout << getName << endl;
只要将getters声明为const
:
class Document
{
public:
std::string getName() const;
int getLenght() const;
};
并指定它们的返回值。
错误消息不太可读,但在gcc中 :
error: passing A as B argument of C discards qualifiers
几乎总是由于试图修改const
而导致的。
其他消息很清楚:
错误:'operator <<'不匹配
( 操作数类型是' std :: ostream {aka std :: basic_ostream}'和' void ')
cout << it-> getName()<< endl;
那就是你试图将std :: ostream和void传递给操作符。
虽然你没有显示相关的代码,但是这些错误信息足以对这个问题做出相当好的猜测。
你的课显然看起来像这样:
class Document {
// ...
public:
void getName() { /* ... */ }
void getLength() { /* ... */ }
// ...
};
为了解决这个问题,你需要改变getName
和getLength
为1)返回值,并且2)是const
成员函数,这个一般顺序是:
class Document {
// ...
public:
std::string getName() const { /* ... */ }
size_t getLength() const { /* ... */ }
// ...
};
链接地址: http://www.djcxy.com/p/90139.html