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