在C ++ 11中的向量上使用每个

时间:2014-05-16 17:41:42

标签: c++ c++11 vector

我想迭代一个struct指针的向量,并在每个指针上做一些工作。在使用谷歌和这个网站研究这个问题后,我一直在尝试使用以下代码,但是没有运气获得编译代码。

我使用的循环如下,我尝试了两种类型

for (auto & i : Mg_Server::servers)
{
    printf("%s\n", i->server_ctx->ns_server->server_data);
}

/*
for (vector<Mg_Server::mg_instance *>::size_type i = 0; i != Mg_Server::servers.size; ++i)
{
    printf("%s\n", Mg_Server::servers[i]->server_ctx->ns_server->server_data);
}*/

我的向量在头文件中声明为静态

class Mg_Server {

public:
    Mg_Server(){}
    ~Mg_Server(){}

   // functions

private:

    struct mg_instance{
        struct mg_server * server_ctx;
        bool running;
    };

    // stuff

    static vector<mg_instance *> servers;

};

我已经使用

在cpp文件中实例化了向量
vector<Mg_Server::mg_instance *> Mg_Server::servers;

我正在使用

在CentOS 5.8上编译此代码
g++44 -Wall -c -std=c++0x "some include directories" -g -D LINUX -m64 -ansi src/mg_server.cpp

我收到以下错误。第58行是for语句在for循环后开始的地方。

src/mg_server.cpp:47: warning: ‘auto’ will change meaning in C++0x; please remove it
src/mg_server.cpp:47: error: expected initializer before ‘:’ token
src/mg_server.cpp:58: error: expected primary-expression before ‘if’
src/mg_server.cpp:58: error: expected ‘;’ before ‘if’
src/mg_server.cpp:58: error: expected primary-expression before ‘if’
src/mg_server.cpp:58: error: expected ‘)’ before ‘if’

我应该如何迭代C ++ 0x中的向量?

2 个答案:

答案 0 :(得分:8)

g++4.4不支持基于范围的for循环。请参阅gcc C++11 status页面。版本4.6中添加了支持。你应该upgrade your compiler

如果您无法这样做,则应使用Boost.Foreach,或者继续使用迭代器。

答案 1 :(得分:1)

g++44 -Wall -c -std=c++0x "some include directories" -g -D LINUX -m64 -ansi src/mg_server.cpp

-ansi会覆盖-std=...。删除它。