私はの宣言がある状況にありvector<vector<string>>
ます。Windowsでは、これを構造体で宣言できますvector<vector<string>>v={{"me","you"}}
が、Linuxマシンではエラーのみなので、構造体の初期化後に宣言する必要がありますが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 に答える