【发布时间】:2017-10-05 16:57:53
【问题描述】:
我有两个类,一个包含 vector<double> 的 Measurement 类和包含 vector<Measurement> 的 Experiment:
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;}
};
简而言之,我试图遍历Experiment(外循环)中的每个Measurement,然后遍历每个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,但这并没有说明成员相对于this的常量性。你需要getMeasurements() const {return measurements;}
标签: c++ class vector constants const-iterator