我有两个类(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;}
};
简而言之,我正在尝试遍历每个 Measurement
在Experiment
(外循环),然后遍历每个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/