1

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

4

2 回答 2

2

-std=c++0x如果您使用的是 GCC,他们需要一个支持此 C++11 初始化功能的版本,然后您需要通过向编译器传递标志(或=std=c++114.7 系列)来告诉编译器以 C++11 模式编译。请参阅使用 GCC 4.7.2 编译的这个演示

#include <vector> 
#include <string>   
int main() 
{   
  std::vector<std::vector<std::string>> v = {{"me","you"}}; 
}
于 2013-03-03T23:19:33.990 回答
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++ 特性:

于 2013-03-03T23:23:29.467 回答