Подтвердить что ты не робот

Шаблон класса С++ - это шаблон: аргумент шаблона недействителен

У меня проблема с шаблоном класса. Я хочу, чтобы частные данные в классе были вектором векторов какого-то числового типа, i.e:

std::vector<std::vector<double> >
std::vector<std::vector<std::complex<double> > >

Но я хочу тип вектора (я использую библиотеку сторонних векторов вместе с stl-векторами) и тип элемента, который нужно запланировать. Я пробовал шаблоны шаблонов, но теперь я не думаю, что это решение моей проблемы. Очень упрощенный пример:

#include <complex>
#include <vector>
template<typename T>
class Fred {
    std::vector<T> data_;
};
int main(){
    Fred<std::vector<double> > works;
    //Fred<std::vector<std::complex<double> > doesnt_work;
    return 0;
}

Как показано, он компилируется отлично, но если я раскомментирую вторую строку в основном, я получаю ошибку (g++ 4.6):

error: template argument 1 is invalid

Почему я получаю эту ошибку? И есть ли у кого-нибудь предлагаемое решение? Спасибо!

4b9b3361

Ответ 1

#include <complex>
#include <vector>
template<typename T>
class Fred {
    std::vector<T> data_;
};

int main(){
    //Fred<std::vector<double> > works;
    Fred<std::vector<std::complex<double> > > doesnt_work;
    return 0;
}

Хорошо работает. Вы пропустите третий > в объявлении doesnt_work.