无法将'notes'从'std :: array <double,6u =“”>'转换为'std :: array <double,7u =“”> </double,> </double,>

时间:2014-04-25 13:10:55

标签: c++ arrays

我有一个与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>'|

2 个答案:

答案 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>