向量字符串向量的问题
我处于声明vector<vector<string>>
的情况。在Windows上,我可以声明这样的结构像vector<vector<string>>v={{"me","you"}}
,但在Linux机器..只是错误,所以我必须在结构初始化后声明它,但如何,因为mystruct.vec[0]={"me","you"}
给我一个分段错误。任何请求?向量字符串向量的问题
在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++功能:
似乎是我的4.4.5(debian).. – siloan 2013-03-03 23:34:34
@siloan - 它看起来像在4.4中引入了初始化器列表。你确定你正在用'-std = gnu ++ 0x'或'-std = C++ 0x'标记编译吗? – Omnifarious 2013-03-03 23:38:38
是的,我正在编译该标志,并为此'std :: vector
如果您使用的是GCC,则需要支持此C++ 11初始化功能的版本,然后您需要告诉编译器在C++ 11模式下编译为-std=c++0x
标志(或=std=c++11
为4.7系列)。见this demo,与GCC 4.7.2编译:
#include <vector>
#include <string>
int main()
{
std::vector<std::vector<std::string>> v = {{"me","you"}};
}
在windows和linux上可能有不同的编译器版本或编译器。请指定您正在使用的编译器,或者(对于解决方案),只需将linux盒升级到最新的编译器即可。 – 2013-03-03 23:14:29
这种初始化相对较新 - 它是C++ 11。并非所有编译器都提供对该标准的全面支持。 – dasblinkenlight 2013-03-03 23:14:57
在Windows上,我在linux上使用mingw和最新的gcc代码块。 – siloan 2013-03-03 23:20:50