模板函数不适用于动态大小数组

时间:2016-05-05 11:40:19

标签: c++

我试着编写一个函数来对数组中的项进行求和:

template <class T, size_t N>
T sumItems(T (&arrayOfInt)[N]) {
    int sum = 0;
    for (int i = 0; i < N; i++) {
        sum += arrayOfInt[i];
    }
    return sum;
}

我称之为:

int main(int argc, const char * argv[]) {

    cout << "Plese enter the number of elements: ";
    int numOfElements;
    cin >> numOfElements;

    int arrayOfInts[numOfElements];

    for (int i = 0; i < numOfElements; i++) {
        cin >> arrayOfInts[i];
    }

    int sum = sumItems(arrayOfInts);

    cout << sum << endl;

    return 0;
}

编译器告诉我&#34;没有匹配函数来调用&#39; sumItems&#39;&#34;。 但是,如果我改变

int arrayOfInts[numOfElements];

int arrayOfInts[5];

代码可以正常运行。

我知道应该有一些更好的解决方案(比如使用vector而不是数组)。但是我想知道它为什么会有这种行为以及如何避免这种行为。

提前致谢!

0 个答案:

没有答案