做自己的程式碼程式庫要注意的問題

來源:互聯網
上載者:User

    隨著學習的增多,以及對相關的資料結構和演算法的實現,發現很多簡單的資料結構和輸入輸出程式最好是使用自己的版本。比如每次使用下面的代碼肯定是不可避免的

for(list::iterator i=li.begin();i!=li.end();i++)

cout<<*i<<" ";

cout<<endl;

    上面的代碼是不是很麻煩呢?你是否想過這樣使用自己的測試代碼呢?

list_ li;

li.print_list();

    那就自己寫一些簡單的io,list庫存放起來吧,每次都使用自己的,既熟悉又方便。

    當然,自己的代碼只有管理妥當了才會使用方便。這裡主要包括:標頭檔的命名、標頭檔目錄的放置、檔案內部類的設計等。

    第一,標頭檔的放置:你可能希望有一個自己的math.h,然後在項目中使用#include"math.h"或者#include<math.h>,但是糟糕的事情要發生了編譯器有可能出現:

1>c:\program files\microsoft visual studio 9.0\vc\include\cmath(21) : error C2039: “acosf”: 不是“`global namespace'”的成員

1>c:\program files\microsoft visual studio 9.0\vc\include\cmath(21) : error C2873: “acosf”: 符號不能用在 using 聲明中

1>c:\program files\microsoft visual studio 9.0\vc\include\cmath(21) : error C2039: “asinf”: 不是“`global namespace'”的成員

等。

    這是因為你的math.h與系統庫中的math.h衝突了。怎麼辦呢?你見過boost庫中的包含方法嗎?boost庫中是這麼做的:

#include<boost/random.hpp>

    也就是說,他將random.hpp檔案放在檔案夾中,編譯器找到的是這個檔案夾boost的上層目錄(注意不是boost目錄本身,否則你就要使用#include<random.hpp>了),讓後#include裡就有boost了,就不會和其他檔案夾中的random.hpp衝突了。你應該知道怎麼建立自己的math.h了吧?是的,把自己經常使用的源檔案放在目錄中,將這個目錄的父目錄添加到編譯器的附加目錄中即可。

    做法:右鍵項目名》屬性》配置屬性》c/c++》常規》附加元件封裝含目錄,添加自己的庫目錄的父目錄進來。

    第二,標頭檔與源檔案:一般的C++書都告訴我們,將聲明放在標頭檔中(顯示有哪些功能);將定義放在源檔案中(功能的實現部分);標頭檔應該包含對應的源檔案;使用時只需要包含對應的標頭檔即可。這都建立在上一步中添加附加目錄已經設定的情況下。

第三,讓多重專案都使用這個程式碼程式庫:首先,你應該將自己的程式碼程式庫放到一個“寶貴的地方”,這個地方可以是百度網盤,金山快盤等網盤在本機上的檔案夾中,這樣你可以通過網盤實現自動備份。其次,你應該在每個項目的屬性中添加你自己的這個庫目錄位址(見第一,標頭檔的放置)。這樣你可以在一個項目中改動完善你自己的庫檔案,其他的項目自動使用更改後的版本。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.