我有一个与push_back()
相同的功能,但它不起作用。
我如何解决这个问题?
#include <iostream>
#include <array>
#include <string>
using namespace std;
double add(array<double, 6> const& tab);
void add_push_back(array<double, 6+1> tab);
int main()
{
const int tailleTab{6};
array<double, tailleTab> notes = { 11.0, 9.5, 8.4, 12.0, 14.01, 12.03 };
double myMoyenne{};
myMoyenne = add(notes);
cout << myMoyenne;
add_push_back(notes);
for (auto note: notes){
cout << note << endl;
}
return 0;
}
double add(array<double, 6> const& tab){
double result{};
for (double note: tab){
result += note;
}
result /= tab.size();
return result;
}
void add_push_back(array<double, 6+1> tab){
array<double, 6+1> push;
for (unsigned int i = 0; i < tab.size(); ++i){
push.at(i) += tab.at(i);
}
push.at(7) = {7};
for (unsigned int i = 0; i < push.size(); ++i){
tab.at(i) += push.at(i);
}
}
错误:
error: could not convert 'notes' from 'std::array<double, 6u>' to 'std::array<double, 7u>'|
答案 0 :(得分:2)
您不能将包含6个元素的std::array
传递给期望std::array
包含7个元素的函数,因为std::array<type, 6>
是不同类型 std::array<type, 7>
。编译器将具有不同模板参数的模板类视为不同类型。
要解决您的紧急问题,您需要将tab
的{{1}}参数从add_push_back
更改为array<double, 6+1>
。
但是,我建议您使用更适合调整大小的array<double, 6>
或std::vector
。快速查看代码表明,您甚至无法执行您尝试对阵列执行的操作。您无法在运行时动态调整std::deque
的大小。
答案 1 :(得分:1)
您的阵列大小不匹配。 notes
数组有6个元素,而7个元素是预期的。请参阅add_push_back
的签名,参数为array<double, 6+1>
。