2013-03-03 75 views
1

我處於聲明vector<vector<string>>的情況。在Windows上,我可以聲明這樣的結構像vector<vector<string>>v={{"me","you"}},但在Linux機器..只是錯誤,所以我必須在結構初始化後聲明它,但如何,因爲mystruct.vec[0]={"me","you"}給我一個分段錯誤。任何請求?向量字符串向量的問題

+0

在windows和linux上可能有不同的編譯器版本或編譯器。請指定您正在使用的編譯器,或者(對於解決方案),只需將linux盒升級到最新的編譯器即可。 – 2013-03-03 23:14:29

+1

這種初始化相對較新 - 它是C++ 11。並非所有編譯器都提供對該標準的全面支持。 – dasblinkenlight 2013-03-03 23:14:57

+0

在Windows上,我在linux上使用mingw和最新的gcc代碼塊。 – siloan 2013-03-03 23:20:50

回答

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++功能:

+0

似乎是我的4.4.5(debian).. – siloan 2013-03-03 23:34:34

+0

@siloan - 它看起來像在4.4中引入了初始化器列表。你確定你正在用'-std = gnu ++ 0x'或'-std = C++ 0x'標記編譯嗎? – Omnifarious 2013-03-03 23:38:38

+0

是的,我正在編譯該標誌,併爲此'std :: vector > v = {{「我」,「你」}};'給了我一堆錯誤。 – siloan 2013-03-03 23:46:11

2

如果您使用的是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"}}; 
}