STL向量错误:未知的类型名称

时间:2014-05-08 21:19:49

标签: c++ vector stl g++

我有这个结构:

struct casilla{
        int x,y;
    };

这些代码行;

std::vector<std::vector<std::vector<casilla> > > iniciales;
iniciales.resize(7);

我在g ++编译器中给出了这个错误:

src/tetromino.cpp:5:1: error: unknown type name 'iniciales'
iniciales.resize(7);
^
src/tetromino.cpp:5:10: error: expected unqualified-id
iniciales.resize(7);

编辑:我修改了我的代码,现在就是这样:

    std::vector<std::vector<std::vector<casilla> > > iniciales(7);
    for(int i=0; i<iniciales.size();i++){
        iniciales[i].resize(3);
        for(int i=0; i<3;i++)
            iniciales[i][j].resize(4);
        }
        iniciales.at(TTR_CUADRADO){{{0,5},{0,6},{1,5},{1,6}}};
    iniciales.at(TTR_LREVES)={{ {0,4},{0,5},{0,6},{1,6} }, 
    {{-1,5},{0,5},{1,5},{1,4}},
    {{0,4},{1,4},{1,5},{1,6}},
    {{-1,5},{-1,6},{0,5},{1,5}}
    };
    iniciales.at(TTR_L)={{{0,4}{0,5},{0,6},{1,4}},{{-1,5},{0,5},{1,5},{1,6}},
    {{0,4},{0,5},{0,6},{-1,6}},{{-1,4},{-1,5},{0,5},{1,5}}};
    iniciales.at(TTR_Z)={{{0,5},{0,6},{1,6},{1,7}},{{0,6},{1,6},{0,7},{-1,7},}};
    iniciales.at(TTR_ZREVES)={{{0,6},{0,7},{1,5},{1,6}},{{0,6},{0,7},{-1,6},{1,7}}};
    iniciales.at(TTR_I)={{{0,4},{0,5},{0,6},{0,7}},{{-2,6},{-1,6},{0,6},{1,6}}};
    iniciales.at(TTR_T)={{{0,5},{0,6},{0,7},{1,6}}}
for(int i=0; i<iniciales.size();i++){
    for(int i=0; i<3;i++)
        iniciales[i][j].shrink_to_fit();
    }
}

所有TTR *变量都是0到6之间的枚举值。

这是聚会开始的时候:

c++ -Wall -g  -Iinclude -c src/tetromino.cpp -o obj/tetromino.o
src/tetromino.cpp:5:1: error: expected unqualified-id
for(int i=0; i<iniciales.size();i++){
^
src/tetromino.cpp:10:2: error: unknown type name 'iniciales'
        iniciales.at(TTR_CUADRADO){{{0,5},{0,6},{1,5},{1,6}}};
        ^
src/tetromino.cpp:10:11: error: expected unqualified-id
        iniciales.at(TTR_CUADRADO){{{0,5},{0,6},{1,5},{1,6}}};
                 ^
src/tetromino.cpp:11:1: error: unknown type name 'iniciales'
iniciales.at(TTR_LREVES)={{ {0,4},{0,5},{0,6},{1,6} }, 
^
src/tetromino.cpp:11:10: error: expected unqualified-id
iniciales.at(TTR_LREVES)={{ {0,4},{0,5},{0,6},{1,6} }, 
         ^
src/tetromino.cpp:16:1: error: unknown type name 'iniciales'
iniciales.at(TTR_L)={{{0,4}{0,5},{0,6},{1,4}},{{-1,5},{0,5},{1,5},{1,6}},
^
src/tetromino.cpp:16:10: error: expected unqualified-id
iniciales.at(TTR_L)={{{0,4}{0,5},{0,6},{1,4}},{{-1,5},{0,5},{1,5},{1,6}},
         ^
src/tetromino.cpp:18:1: error: unknown type name 'iniciales'
iniciales.at(TTR_Z)={{{0,5},{0,6},{1,6},{1,7}},{{0,6},{1,6},{0,7},{-1,7},}};
^
src/tetromino.cpp:18:10: error: expected unqualified-id
iniciales.at(TTR_Z)={{{0,5},{0,6},{1,6},{1,7}},{{0,6},{1,6},{0,7},{-1,7},}};
         ^
src/tetromino.cpp:19:1: error: unknown type name 'iniciales'
iniciales.at(TTR_ZREVES)={{{0,6},{0,7},{1,5},{1,6}},{{0,6},{0,7},{-1,6},{1,7}}};
^
src/tetromino.cpp:19:10: error: expected unqualified-id
iniciales.at(TTR_ZREVES)={{{0,6},{0,7},{1,5},{1,6}},{{0,6},{0,7},{-1,6},{1,7}}};
         ^
src/tetromino.cpp:20:1: error: unknown type name 'iniciales'
iniciales.at(TTR_I)={{{0,4},{0,5},{0,6},{0,7}},{{-2,6},{-1,6},{0,6},{1,6}}};
^
src/tetromino.cpp:20:10: error: expected unqualified-id
iniciales.at(TTR_I)={{{0,4},{0,5},{0,6},{0,7}},{{-2,6},{-1,6},{0,6},{1,6}}};
         ^
src/tetromino.cpp:21:1: error: unknown type name 'iniciales'
iniciales.at(TTR_T)={{{0,5},{0,6},{0,7},{1,6}}}
^
src/tetromino.cpp:21:10: error: expected unqualified-id
iniciales.at(TTR_T)={{{0,5},{0,6},{0,7},{1,6}}}
         ^
src/tetromino.cpp:22:1: error: expected unqualified-id
for(int i=0; i<iniciales.size();i++){
^
src/tetromino.cpp:26:1: error: extraneous closing brace ('}')
}
^
src/tetromino.cpp:27:1: error: no template named 'vector'; did you mean
      'std::vector'?
vector<casilla> tetromino::Zonstd::aComun(vector<casillstd::a> v1,...
^~~~~~
std::vector
/usr/include/c++/4.2.1/bits/stl_vector.h:162:11: note: 'std::vector' declared
      here
    class vector : protected _Vector_base<_Tp, _Alloc>
          ^
src/tetromino.cpp:27:28: error: no member named 'Zonstd' in 'tetromino'
vector<casilla> tetromino::Zonstd::aComun(vector<casillstd::a> v1,...
                ~~~~~~~~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]

我该怎么办?

正如@Jack所说,我认为这可能是因为我在任何方法之外都是这样做的。我应该制作一个特定的方法来设置这个全局变量。此外,我更喜欢创建一个全局变量,而不是每次调用函数时都创建一个变量。

PS.:Sorry为“奇怪的”变量名称,我用西班牙语编程。 :P

1 个答案:

答案 0 :(得分:5)

我的猜测是你试图在方法之外执行一些代码,例如:

#include <vector>

std::vector<std::vector<std::vector<casilla> > > iniciales;
iniciales.resize(7);

虽然它应该是

#include <vector>

std::vector<std::vector<std::vector<casilla> > > iniciales;

void someMethod() {
  iniciales.resize(7);
}

或者,甚至更好:

std::vector<std::vector<std::vector<casilla> > > iniciales(7);