Почему GCC не позволяет мне использовать параметр шаблона для параметра другого шаблона? - PullRequest
2 голосов
/ 12 мая 2011

Я написал следующую шаблонную функцию для суммирования содержимого объекта std :: vector.Он находится в отдельном файле с именем sum.cpp.

#include <vector>

template<typename T>
T sum(const std::vector<T>* objs) {
    T total;
    std::vector<T>::size_type i;
    for(i = 0; i < objs->size(); i++) {
        total += (*objs)[i];
    }
    return total;
}

Когда я пытаюсь скомпилировать эту функцию, G ++ выдает следующую ошибку:

sum.cpp: In function ‘T sum(const std::vector<T, std::allocator<_Tp1> >*)’:
sum.cpp:6: error: expected ‘;’ before ‘i’
sum.cpp:7: error: ‘i’ was not declared in this scope

Насколько я могусообщить, что эта ошибка возвращается, потому что std::vector<T>::size_type не может быть разрешен для типа.Единственный вариант здесь - вернуться к std::size_t (который, если я правильно понимаю, равен часто , но не всегда такой же, как std::vector<T>::size_type), или есть обходной путь?

Ответы [ 2 ]

6 голосов
/ 12 мая 2011
3 голосов
/ 12 мая 2011

size_type - это зависимое имя, вам нужно добавить к нему префикс typename, то есть:

typename std::vector<T>::size_type i;
...