错误:在'模板'之前预期的primary-expression - 我做错了什么?

时间:2015-11-17 23:45:53

标签: c++ templates metaprogramming

#include <iostream>
#include <vector>

template<class T> struct A {
    A( const std::initializer_list<T> &list ) {
        for( template std::initializer_list<T>::iterator it = list.begin();
             it != list.end(); ++it ) {
            content.emplace( *it );
        }
    }
    ~A() {};
    std::vector<T> content;
};

int main() {
    A<int> a = A<int>( { 1, 2, 3, 4, 5 } );
    for( const int x : a.content ) {
        std::cout << x << " ";
    }
    return 0;
}

上面的代码反映了我遇到的问题。当我尝试编译时,我得到: error: expected primary-expression before 'template'...error: 'it' was not declared in this scope 第14行(迭代器for循环)。我尝试了一些变化,但我没有随处可见。有没有人对这个问题有所了解?感谢。

2 个答案:

答案 0 :(得分:2)

  1. 错误使用模板关键字,假设为.或仅使用->

    for(template std :: initializer_list :: iterator it = list.begin();      ^^^^^^^^ it!= list.end(); ++ it){

  2. 错误使用typename

  3. 修复方法是:

    auto

    或:

    [std::vector::emplace][1]

答案 1 :(得分:1)

在定义template

之前取出it
for (std::initializer_list<T>::iterator it = list.begin();
            it != list.end(); ++it) {
            content.emplace(*it);
}

您也使用了安卓功能错误。 Hereemplace

的文档