我首先在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;
}
反正有從編譯器不兼容救我的代碼?
的''類型是即將修訂的C部分使用升壓庫版本++標準,如果您嘗試將語言更改爲C++ 0x,則可能在g ++中受支持。我不確定這是否會起作用,但這可能是問題的原因。 –
templatetypedef
2011-06-02 00:02:55
換句話說,試試'g ++ -std = C++ 0x' – Nemo 2011-06-02 00:13:46
@Nemo明天我會試試,但現在,我很樂意使用對(按照答案中的建議)。謝謝。 – sj755 2011-06-02 00:24:22