C++ 使用指针访问cpp中的私有值

C++ 使用指针访问cpp中的私有值,c++,accessor,C++,Accessor,出于某种原因,getter方法不起作用。它们是公开的,所以我不知道出了什么问题 for (std::vector<Document>:: const_iterator it = v.begin(); it != v.end(); ++it) { cout << it->getName() << endl; counter += it->getLength(); } 只需将getter声明为const: class Document

出于某种原因,getter方法不起作用。它们是公开的,所以我不知道出了什么问题

for (std::vector<Document>:: const_iterator it = v.begin(); it != v.end(); ++it)
{
    cout << it->getName() << endl;
    counter += it->getLength();
}

只需将getter声明为
const

class Document
{
public:
    std::string getName() const;
    int getLenght() const;
};
并指定它们的返回值

错误消息的可读性不强,但在gcc中:

error: passing A as B argument of C discards qualifiers 
几乎总是由于试图修改常量
而导致的

但是,其他信息很清楚:


错误:“运算符不匹配,只需将getter声明为
const

class Document
{
public:
    std::string getName() const;
    int getLenght() const;
};
并指定它们的返回值

错误消息的可读性不强,但在gcc中:

error: passing A as B argument of C discards qualifiers 
几乎总是由于试图修改常量
而导致的

但是,其他信息很清楚:


错误:“运算符不匹配,只需将getter声明为
const

class Document
{
public:
    std::string getName() const;
    int getLenght() const;
};
并指定它们的返回值

错误消息的可读性不强,但在gcc中:

error: passing A as B argument of C discards qualifiers 
几乎总是由于试图修改常量
而导致的

但是,其他信息很清楚:


错误:“运算符不匹配,只需将getter声明为
const

class Document
{
public:
    std::string getName() const;
    int getLenght() const;
};
并指定它们的返回值

错误消息的可读性不强,但在gcc中:

error: passing A as B argument of C discards qualifiers 
几乎总是由于试图修改常量
而导致的

但是,其他信息很清楚:


错误:与“operator不匹配虽然您没有显示相关代码,但错误消息显示的足够多,足以对问题进行很好的猜测

你的班级看起来像这样:

class Document { 
// ...
public:
    void getName() { /* ... */ }   
    void getLength() { /* ... */ }
    // ...
};
要解决此问题,您需要将
getName
getLength
更改为1)返回值和2)be
const
成员函数,一般顺序如下:

class Document { 
// ...
public:
    std::string getName() const { /* ... */ }   
    size_t getLength() const { /* ... */ }
    // ...
};

虽然您没有显示相关代码,但错误消息显示的信息足以对问题进行很好的猜测

你的班级看起来像这样:

class Document { 
// ...
public:
    void getName() { /* ... */ }   
    void getLength() { /* ... */ }
    // ...
};
要解决此问题,您需要将
getName
getLength
更改为1)返回值和2)be
const
成员函数,一般顺序如下:

class Document { 
// ...
public:
    std::string getName() const { /* ... */ }   
    size_t getLength() const { /* ... */ }
    // ...
};

虽然您没有显示相关代码,但错误消息显示的信息足以对问题进行很好的猜测

你的班级看起来像这样:

class Document { 
// ...
public:
    void getName() { /* ... */ }   
    void getLength() { /* ... */ }
    // ...
};
要解决此问题,您需要将
getName
getLength
更改为1)返回值和2)be
const
成员函数,一般顺序如下:

class Document { 
// ...
public:
    std::string getName() const { /* ... */ }   
    size_t getLength() const { /* ... */ }
    // ...
};

虽然您没有显示相关代码,但错误消息显示的信息足以对问题进行很好的猜测

你的班级看起来像这样:

class Document { 
// ...
public:
    void getName() { /* ... */ }   
    void getLength() { /* ... */ }
    // ...
};
要解决此问题,您需要将
getName
getLength
更改为1)返回值和2)be
const
成员函数,一般顺序如下:

class Document { 
// ...
public:
    std::string getName() const { /* ... */ }   
    size_t getLength() const { /* ... */ }
    // ...
};


它们不是
const
,因此不能使用
const\u迭代器调用它们。它与可访问性无关,而与常量正确性有关。您无法打印返回的内容的结果
void
。啊,好的,但其他两个问题仍然存在+1快速评论。其中一个解决了两个错误,如果你想学究气,我也可以说你不能将返回的
void
结果添加到其他内容中。我看不到另一个问题。为什么它返回无效?啊,别傻了,哈哈,它们不是常量,所以你不能用常量迭代器调用它们。它与可访问性无关,而与常量正确性有关。您无法打印返回的内容的结果
void
。啊,好的,但其他两个问题仍然存在+1快速评论。其中一个解决了两个错误,如果你想学究气,我也可以说你不能将返回的
void
结果添加到其他内容中。我看不到另一个问题。为什么它返回无效?啊,别傻了,哈哈,它们不是常量,所以你不能用常量迭代器调用它们。它与可访问性无关,而与常量正确性有关。您无法打印返回的内容的结果
void
。啊,好的,但其他两个问题仍然存在+1快速评论。其中一个解决了两个错误,如果你想学究气,我也可以说你不能将返回的
void
结果添加到其他内容中。我看不到另一个问题。为什么它返回无效?啊,别傻了,哈哈,它们不是常量,所以你不能用常量迭代器调用它们。它与可访问性无关,而与常量正确性有关。您无法打印返回的内容的结果
void
。啊,好的,但其他两个问题仍然存在+1快速评论。其中一个解决了两个错误,如果你想学究气,我也可以说你不能将返回的
void
结果添加到其他内容中。我看不到另一个问题。为什么它返回无效?啊,别傻了,我知道为什么两者都是空的吗?知道为什么两者都是空的吗?知道为什么两者都是空的吗?知道为什么两者都是空的吗?