c++ - “向量迭代器不兼容。” 如何将它作为参数传递给函数?
问题描述
当我想运行函数“klimaTag()”时,为什么会出现错误“向量迭代器不兼容”?我想给它矢量温度的迭代器。我怎样才能做到这一点?我只想循环主函数中的向量。
#include <iostream>
#include <vector>
class TemperatureCalculator {
private:
std::vector<float> temperatures;
public:
TemperatureCalculator(std::vector<float> temperatures) {
this->temperatures = temperatures;
}
std::string klimaTag(std::vector<float>::iterator i) {
if (*i >= 25 and *i < 30) {
return "Sommertag";
}
else if (*i >= 30 and *i < 35) {
return "Heißer Tag";
}
else if (*i >= 35) {
return "Wüstentag";
}
else {
return "Normaltag";
}
}
void get_user_input() {
int numberDays;
std::cout << "Wie viele Tage möchten Sie auswerten?" << std::endl;
std::cin >> numberDays;
float current_temp;
for (int i = 0; i < numberDays; i++) {
std::cout << "Hoechsttemp für Tag " << i + 1 << " eingeben: ";
std::cin >> current_temp;
temperatures.push_back(current_temp);
}
}
std::vector<float> get_temperature() {
return this->temperatures;
}
};
int main()
{
TemperatureCalculator t({});
t.get_user_input();
for (std::vector<float>::iterator i = t.get_temperature().begin(); i != t.get_temperature().end(); i++) {
std::cout << "Tag " << *i + 1 << " ist ein " << t.klimaTag(i) << std::endl;
}
}
解决方案
您返回向量 in 的副本get_temperature
,因此使用临时向量的迭代器 in
std::vector<float>::iterator i = t.get_temperature().begin()
解决方案是返回参考:
class TemperatureCalculator {
private:
std::vector<float> temperatures;
// ...
public:
const std::vector<float>& get_temperature() const { return this->temperatures; }
// Possibly:
//std::vector<float>& get_temperature() { return this->temperatures; }
};
请注意,传递简单的迭代器似乎很奇怪,而传递值可以完成这项工作:
std::string klimaTag(float f) const
{
if (25 <= f and f < 30) {
return "Sommertag";
}
else if (30 <= f and f < 35) {
return "Heißer Tag";
}
else if (*35 <= f) {
return "Wüstentag";
}
else {
return "Normaltag";
}
}
所以你的循环变成:
for (float f : t.get_temperature()) {
std::cout << "Tag " << f + 1 << " ist ein " << t.klimaTag(f) << std::endl;
}
推荐阅读
- c# - 寻找有关在 C# 中使用 USING 的说明
- mapbox - 在 Mapbox Android SDK 中显示具有自定义属性的圆环图集群
- spring-boot - Java 是否有类似于 .Net Framework 和 Entity Framework 的迁移工具
- python - Plotly:如何防止标题与情节重叠?
- python - 将变量从 PHP 发送到 Python?
- reactjs - 基于 Material UI 的 github 标签选择器示例如何删除 Material UI 芯片元素
- selenium - 黄瓜导入构建失败
- c# - 从 swagger.json 生成 C# Rest API 客户端
- javascript - 按下键盘上的特定键触发的 Onclick 功能
- sharepoint - 使用 MS Graph for Onedrive/Sharepoint 复制文件,重命名以防它存在