由于某种原因,getter方法不起作用。它们是公开的,所以我不知道出了什么问题。
for (std::vector<Document>:: const_iterator it = v.begin(); it != v.end(); ++it)
{
cout << it->getName() << endl;
counter += it->getLength();
}
错误:将'const Document'作为'void Document :: getName()'的'this'参数传递,丢弃限定符[-fpermissive] cout&lt;&lt; it-&gt; getName()&lt;&lt; ENDL;
错误:'operator&lt;&lt;'不匹配(操作数类型是'std :: ostream {aka std :: basic_ostream}'和'void') cout&lt;&lt; it-&gt; getName()&lt;&lt; ENDL;
错误:将'const Document'作为'void Document :: getLength()'的'this'参数传递,丢弃限定符[-fpermissive] counter + = it-&gt; getLength();
错误:类型'int'和'void'的操作数无效,二进制'operator +' counter + = it-&gt; getLength();
嗯,有没有办法可以为最后一个问题做(int) (it->getLength())
我们可以为另一个做:
std::ostringstream value;
value << (*it).getName();
cout << getName << endl;
答案 0 :(得分:2)
只需声明getter为const
:
class Document
{
public:
std::string getName() const;
int getLenght() const;
};
并指定其返回值。
错误消息的可读性不高,但在 gcc :
中error: passing A as B argument of C discards qualifiers
几乎总是由尝试修改const
的内容引起的。
其他消息是明确的:
错误:'operator&lt;&lt;'不匹配
(操作数类型是' std :: ostream {aka std :: basic_ostream}'和' void ') cout&lt;&lt; it-&gt; getName()&lt;&lt; ENDL;
您正试图将 std :: ostream 和 void 传递给运营商。
答案 1 :(得分:1)
虽然您没有显示相关代码,但错误消息足以让您对此问题有一个很好的猜测。
你的班级显然看起来像这样:
class Document {
// ...
public:
void getName() { /* ... */ }
void getLength() { /* ... */ }
// ...
};
要解决此问题,您需要将getName
和getLength
更改为1)返回值,并且2)成为const
成员函数,这是一般订单:
class Document {
// ...
public:
std::string getName() const { /* ... */ }
size_t getLength() const { /* ... */ }
// ...
};