我是半導體公司的ATE工程師,我需要開發以及維護測試程序。最近我想在ATE平臺上添加一個配置文件解析功能。但是,標準測試平臺並不是最新的(我不確定這是否會導致問題)。std :: map on gcc 3.2.3 Red Hat Linux 3.2.3-20
我檢查了一些資源,發現了幾個候選人:getpot(http://getpot.sourceforge.net/),inih(https://github.com/benhoyt/inih)。與這兩個,我可以直接編譯和運行在我的Windows 7與GCC 4.8.1。但是,我將不得不在我的ATE Red Hat 3.2.3上使用它。我無法更改平臺(例如更新gcc版本,安裝新軟件包),但我可以將所有必需的代碼都包含爲原始文件。
以下是我與inih嘗試:
1:我複製的代碼共享文件夾(主機的窗口和虛擬機紅帽之間)。在Windows上,我編譯並正確運行。但是,在紅帽子上,它顯示如下錯誤。這裏是一個顯示錯誤的部分:
string INIReader::Get(string section, string name, string default_value) const
{
string key = MakeKey(section, name);
return _values.count(key) ? _values.at(key) : default_value;
}
我只是試圖修改它來實現的std ::地圖::在如下圖所示:
template<typename T1, typename T2, typename T3, typename T4>
T2 mapAt(std::map<T1, T2, T3, T4>& m, const T1& key)
{
typeof(m.begin()) mit = m.find(key);
if (mit == m.end() || mit->first != key)
{
throw std::out_of_range("map::at");
}
return mit->second;
}
string INIReader::Get(string section, string name, string default_value) const
{
string key = MakeKey(section, name);
return _values.count(key) ? mapAt(_values, key) : default_value;
}
,仍然會生成如下錯誤:
2:當我在工作文件中添加來源,我已經確認濟,有標籤,而不是上線8空白,它仍然顯示失蹤分離錯誤。
根據[GCC](https://gcc.gnu.org/releases.html)網站,GCC 3.2.3於2003-04-23發佈。這會變成古董(並且已經有好幾年了)。如果您無法升級編譯器,請降級源代碼,以便它可以與舊版本的標準一起使用。 –
嗨喬納森,理解,這是我正在嘗試做的 - 降級。只是我不是C++的專家,因此我來到這裏尋求建議/幫助。 – Jinstrong
請不要更新問題和跟進問題。其中一個答案解決了您的問題。接受它並在跟進中提出一個新問題。否則,很難遵循正在發生的事情。 – pmr