矢量字符串问题的向量

时间:2013-03-03 23:12:54

标签: c++

我处于声明vector<vector<string>>的情况。在Windows上可以,我可以在像vector<vector<string>>v={{"me","you"}}这样的结构中声明这个但是在linux机器上..只有错误所以我必须在结构初始化后声明它,但是因为mystruct.vec[0]={"me","you"}给了我一个分段错误。请问有什么消化吗?

2 个答案:

答案 0 :(得分:2)

如果您正在使用GCC,那么您需要一个支持此C ++ 11初始化功能的版本,然后您需要通过传递-std=c++0x标志告诉编译器在C ++ 11模式下编译(或=std=c++11为4.7系列)。参见使用GCC 4.7.2编译的this demo

#include <vector> 
#include <string>   
int main() 
{   
  std::vector<std::vector<std::string>> v = {{"me","you"}}; 
}

答案 1 :(得分:2)

gcc 4.7.2上的这个程序运行得很好:

#include <vector>
#include <string>
#include <utility>
#include <iostream>

using ::std::vector;
using ::std::string;
using ::std::move;

vector<vector<string>> foo()
{
   vector<vector<string>>v={{"me","you"}};
   return move(v);
}

int main()
{
   using ::std::cout;

   cout << "{\n";
   for (auto &i: foo()) {
      cout << "   {\n";
      for (auto &o: i) {
         cout << "      \"" << o << "\",\n";
      }
      cout << "   },\n";
   }
   cout << "}\n";
   return 0;
}

它产生这个输出:

$ /tmp/a.out 
{
   {
      "me",
      "you",
   },
}

我认为您的问题是旧的编译器,或者您的代码中的某些其他地方存在其他问题。

我用这个命令行编译:

$ g++ -std=gnu++0x -march=native -mtune=native -Ofast -Wall -Wextra vvstr.cpp

我的g ++将此作为版本:

$ g++ --version
g++ (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

此页面告诉您哪个版本的gcc具有哪个C ++功能: