创建局部结构的std :: vector的错误

时间:2014-02-21 10:32:36

标签: c++ structure stdvector

#include <vector>
int main() {
    struct st { int a; };
    std::vector<st> v;
    for (std::vector<st>::size_type i = 0; i < v.size(); i++) {
        v.operator[](i).a = i + 1; // v[i].a = i+1;
    }
}

使用GNU g ++编译器编译时,上面的代码会出现以下错误。

test.cpp: In function ‘int main()’:
test.cpp:6:19: error: template argument for ‘template<class _Alloc> class std::allocator’ uses local type ‘main()::st’
test.cpp:6:19: error:   trying to instantiate ‘template<class _Alloc> class std::allocator’
test.cpp:6:19: error: template argument 2 is invalid
test.cpp:6:22: error: invalid type in declaration before ‘;’ token
test.cpp:7:24: error: template argument for ‘template<class _Alloc> class std::allocator’ uses local type ‘main()::st’
test.cpp:7:24: error:   trying to instantiate ‘template<class _Alloc> class std::allocator’
test.cpp:7:24: error: template argument 2 is invalid
test.cpp:7:37: error: expected initializer before ‘i’
test.cpp:7:44: error: ‘i’ was not declared in this scope
test.cpp:7:50: error: request for member ‘size’ in ‘v’, which is of non-class type ‘int’
test.cpp:8:20: error: request for member ‘operator[]’ in ‘v’, which is of non-class type ‘int’

为什么我无法创建结构矢量?

1 个答案:

答案 0 :(得分:18)

在C ++ 11之前,您无法使用本地类实例化模板。您有两种选择:

1)将st定义置于main

之外
#include <vector>

struct st { int a; };

int main() 
{
  std::vector<st> v;
}

2)使用c ++ 11编译器编译