c++ - 在 const 迭代器上调用成员函数

标签 c++ class vector constants const-iterator

我有两个类(class),一个Measurement包含 vector<double> 的类和一个 Experiment其中包含 vector<Measurement> :

class Measurement {

private:
    vector<double> dataSet;
    string time_stamp;  

public:
    const vector<double>& getDataSet() {return dataSet;}
    string getTimeStamp() {return time_stamp;}

};

class Experiment {

private: 
    vector<Measurement> measurements;

public:
    const vector<Measurement>& getMeasurements() {return measurements;}

};

简而言之,我正在尝试遍历每个 MeasurementExperiment (外循环),然后遍历每个Measurement中的数据(内循环)。

我在 this thread 找到了一些帮助,这就是成员函数 getDataSet() 的原因和 getMeasurements()const & (使迭代器兼容)。

然而,当我尝试调用 iter_meas->getDataSet() 时,我遇到麻烦了。

int main() {


Experiment expTest(); // experiment already filled with measurements

vector<Measurement>::const_iterator iter_meas;
vector<double>::const_iterator iter_data;

for (iter_meas = expTest.getMeasurements().begin(); iter_meas != expTest.getMeasurements().end(); iter_meas++) {

    cout << iter_meas->getTimeStamp() << ',';   //this works fine :)

    for (iter_data = iter_meas->getDataSet().begin(); iter_data != iter_meas->getDataSet().end(); iter_data++){
        //              ^^^ here I get the error
        //              "the object has qualifiers that are not compatible with the member function getDataSet"
        //              "object type is const measurement"          
        cout << iter_data << ",";
    }
    cout << '\n';
}
return 0;
}

我明白 iter_meas代表 const Measurement , 但我不确定为什么我不能调用 Measurement::成员函数呢?

我正在使用 Visual Studio Community 2015。

最佳答案

这意味着函数返回常量值,仅此而已。

const int foo();

如果变量是const,则不能改变值,只能初始化。

所以如果你的程序中有 const 迭代器,它不能改变你的对象的值。与方法相同的情况,它不能调用可能改变值的方法。

有一个解决方案。您必须将函数声明为 const(不返回 const 值)

int foo() const;

现在您可以从 const 迭代器调用此函数。 声明为:

const vector<Measurement>& getMeasurements() const {return measurements;}
const vector<double>& getDataSet() const {return dataSet;} // same problem

关于c++ - 在 const 迭代器上调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834954/

相关文章:

c++ - 条件运算符的返回值

c++ - Objective-C @class/import 最佳实践

java - Java 中是否有相当于 Actionscript 3.0 事件调度的方法?或者,如何在不相关的类实例之间有效地进行通信?

c++ - 与size_t比较,返回int?

c++ - cout 在 vector 迭代器 C++ 中似乎无法正常工作

python - 导出函数时boost python模板参数推导/替换失败

java - 当没有明确定义的父类(super class)时,为什么要在父类(super class)中使用 super 调用

.net - 如何循环遍历一个类的所有属性?

c++ - 如何在 Vector 中存储类指针?

c++ - memcpy 不复制到缓冲区