使用指针访问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 :: ostreamvoid传递给操作符。


虽然你没有显示相关的代码,但是这些错误信息足以对这个问题做出相当好的猜测。

你的课显然看起来像这样:

class Document { 
// ...
public:
    void getName() { /* ... */ }   
    void getLength() { /* ... */ }
    // ...
};

为了解决这个问题,你需要改变getNamegetLength为1)返回值,并且2)是const成员函数,这个一般顺序是:

class Document { 
// ...
public:
    std::string getName() const { /* ... */ }   
    size_t getLength() const { /* ... */ }
    // ...
};
链接地址: http://www.djcxy.com/p/90139.html

上一篇: Accessing private values in cpp using pointers

下一篇: No matching function call error C++