解決ambiguous symbol命名空間中類名、變量名沖突的問題


  最近在將一個復雜的工程集成到現有的項目中。編譯時發現,有的變量名沖突了,提示就是xxxx ambiguous symbol,並且在編譯輸出時,指明了兩個文件當中特定的變量名或者類名相同。出現這個編譯錯誤的原因是,在工程中加載了兩個頭文件,這兩個頭文件中包含相同的類名或者變量名,解決及避免出現此類錯誤的方法如下:

  1. 代碼庫盡量包含在一個命名空間中。在我們寫一個大的程序時,一些變量可能會與其他工程造成重名,所以加命名空間是很有必要的;另外,在自己的代碼庫中命名的類名變量名盡量以代碼庫的名稱開頭,這樣大大降低和其他代碼庫命名沖突的可能性;
  2. 禁止在頭文件中使用using namespace xxx。這很關鍵,頭文件中使用命名空間,那么加載該頭文件的文件,都加載了命名空間,造成頭文件污染;正確的方法是在頭文件中加載對應庫的頭文件,但是在使用到該庫中的類名變量名前使用域標識符,如std::string;
  3. 還有一種偷懶的方法,直接在沖突的地方指定其域標識符,但是假設沖突的地方很多,那么這種方法就很麻煩了,推薦使用1和2,從根上解決問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM