2011-06-01 67 views
4

我首先在VS2010中用Microsoft VC++開始C++。我最近發現了一些工作,但我一直在使用RHEL 5和GCC。我的代碼大多是本機C++,但我注意到一件事...海灣合作委員會的元組模板

GCC似乎不識別<tuple>頭文件或元組模板。起初,我想也許這只是一個錯字,直到我看着cplusplus.com,並發現標題確實不是標準庫的一部分。

問題是我喜歡在Visual Studio中編寫我的代碼,因爲環境比eclipse或netbeans的環境要優越,美觀,而且調試起來很輕鬆。事情是,我已經寫了一大堆代碼來使用元組,我非常喜歡我的代碼。我該如何處理這個問題?

這裏是我的代碼:

using std::cout; 
using std::make_tuple; 
using std::remove; 
using std::string; 
using std::stringstream; 
using std::tolower; 
using std::tuple; 
using std::vector; 

// Define three conditions to code 
enum {DONE, OK, EMPTY_LINE}; 
// Tuple containing a condition and a string vector 
typedef tuple<int,vector<string>> Code; 


// Passed an alias to a string 
// Parses the line passed to it 
Code ReadAndParse(string& line) 
{ 

    /***********************************************/ 
    /****************REMOVE COMMENTS****************/ 
    /***********************************************/ 
    // Sentinel to flag down position of first 
    // semicolon and the index position itself 
    bool found = false; 
    size_t semicolonIndex = -1; 

    // Convert the line to lowercase 
    for(int i = 0; i < line.length(); i++) 
    { 
     line[i] = tolower(line[i]); 

     // Find first semicolon 
     if(line[i] == ';' && !found) 
     { 
      semicolonIndex = i; 
      // Throw the flag 
      found = true; 
     } 
    } 

    // Erase anything to and from semicolon to ignore comments 
    if(found != false) 
     line.erase(semicolonIndex); 


    /***********************************************/ 
    /*****TEST AND SEE IF THERE'S ANYTHING LEFT*****/ 
    /***********************************************/ 

    // To snatch and store words 
    Code code; 
    string token; 
    stringstream ss(line); 
    vector<string> words; 

    // A flag do indicate if we have anything 
    bool emptyLine = true; 

    // While the string stream is passing anything 
    while(ss >> token) 
    { 
     // If we hit this point, we did find a word 
     emptyLine = false; 

     // Push it onto the words vector 
     words.push_back(token); 
    } 

    // If all we got was nothing, it's an empty line 
    if(emptyLine) 
    { 
     code = make_tuple(EMPTY_LINE, words); 
     return code; 
    } 


    // At this point it should be fine 
    code = make_tuple(OK, words); 
    return code; 
} 

反正有從編譯器不兼容救我的代碼?

+3

的''類型是即將修訂的C部分使用升壓庫版本++標準,如果您嘗試將語言更改爲C++ 0x,則可能在g ++中受支持。我不確定這是否會起作用,但這可能是問題的原因。 – templatetypedef 2011-06-02 00:02:55

+3

換句話說,試試'g ++ -std = C++ 0x' – Nemo 2011-06-02 00:13:46

+0

@Nemo明天我會試試,但現在,我很樂意使用對(按照答案中的建議)。謝謝。 – sj755 2011-06-02 00:24:22

回答

1

只要它只是一對可以使用

typedef pair<int,vector<string>> Code; 

但我不認爲元組標準C++(原來它被包含在TR1,因此也是標準的C++ 0x)。像往常一樣,Boost雖然覆蓋了你。所以包括:

#include "boost/tuple/tuple.hpp" 

將解決你的問題跨編譯器。

+0

當然,我一直在使用元組,所以我忘記了一對中可以包含兩個元素。 – sj755 2011-06-02 00:23:09

1

的編譯器附帶的TR1庫還要在這裏

#include <tr1/tuple.hpp> 

//... 

std::tr1::tuple<int, int> mytuple; 

當然對於便攜性,你可以在此期間

相關問題