我处于声明的情况vector<vector<string>>
。在 Windows 上没关系,我可以在 struct 中声明它,vector<vector<string>>v={{"me","you"}}
但在 linux 机器上。只有错误,所以我必须在 struct 初始化后声明它,但是如何因为mystruct.vec[0]={"me","you"}
给我一个分段错误。请问有什么建议吗?
问问题
174 次
2 回答
2
-std=c++0x
如果您使用的是 GCC,他们需要一个支持此 C++11 初始化功能的版本,然后您需要通过向编译器传递标志(或=std=c++11
4.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 回答