簡體   English   中英

minGW-W64 g ++中的C ++代碼編譯不能用Ubuntu g ++編譯

[英]C++ code compiling in minGW-W64 g++ does not compile with Ubuntu g++

我在運行Ubuntu的工作站上的Windows 10 Code :: Blocks環境中編寫的程序編譯時遇到了一些問題。

具體來說,編譯器沒有代碼問題

g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 5.3.0*

而編譯器抱怨代碼是

g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2

后者抱怨代碼的多個部分,包括Alglib庫的各個部分和Numerical Recipes NR3庫的重載throw()定義。

我可以避免使用上面的兩個庫,但是不明白為什么我為我的一個類編寫的has函數存在問題。 它給了我一個

錯誤:'type name'聲明為返回函數的函數

為線

for(auto& P : n) res = res ^ ((std::hash<double>()(double(int(P))) ) << ct++  );

其中n是整數的stl向量和類的成員。 所以我的問題是:

  1. 為什么Ubuntu g ++編譯器不遵循與MinGW g ++相同的標准? (並且可以在Ubuntu上更改為某些版本的g ++,它遵循相同的標准)

  2. 關於哈希函數中的行的含糊不清(哈希函數的效率/質量目前並不重要)

您將此問題標記為c ++ 11,因此我假設您正在編譯該標准。 g++-4.8是第一個完全支持c ++ 11的版本,但它仍被描述為“實驗性”。 https://gcc.gnu.org/gcc-4.8/cxx0x_status.html 此外,我認為當時標准庫支持也不完整。

g++-4.9是支持首先變得非常好的地方,所有部分都已到位並且主要缺陷是固定的。

如果您正在運行Ubuntu老謀深算,默認g++版本是5.3與您的MinGW的。

如果您使用的是較舊的Ubuntu,則可以添加toolchain/test apt-repository並下載g++-4.9或更高版本。

以下是如何執行此操作的一些說明:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.9

參考: https//askubuntu.com/questions/428198/getting-installing-gcc-g-4-9-on-ubuntu


要提供有關錯誤的具體信息,您需要顯示更多代碼。 這聽起來像某種語法錯誤,但很難說它是由語言特性,標准庫元素或組合引起的,基於您展示的小代碼。


另一種選擇是在舊的Ubuntu上使用clang++ clang-3.6在我的經驗中對C ++ 11有很好的支持,並且比當代gcc版本更快地被Ubuntu所接受,所以你可以使用它並讓你的項目在沒有添加toolchain-r/test情況下進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM