2013-04-06 47 views
0

我正在爲使用C++的學校做一個項目,該項目將被拆分成多個文件。使用多個文件時,我會在哪裏放置預處理器命令?

test_driver.cpp - a file to test the code written 
storage.cpp - implementation file for storage class and methods 
storage.h - header file for storage 
song.cpp - implementation file for song class, songs are the data type being manipulated by storage 
song.h - header file for song 

我在哪裏放我的#包括。存儲取決於歌曲數據類型,因爲它主要是在操縱它們,改變標題和移動它們等。我很抱歉,如果這看起來像一個新問題,但我真的不知道,並且還沒有找到一個確切的答案。我還想聲明一個全局常量以在實現文件中共享,這可能嗎?

回答

0

試試這個(每個CPP文件,我列出了.h文件應該包括它裏面):

song.cpp 
    song.h 

storage.cpp 
    storage.h 
    song.h 

另外,如果storage.h定義還取決於song.h(即,它使用從它的定義),你可以這樣做:

storage.h 
    song.h 

storage.cpp 
    storage.h 

至於常數,你爲什麼不定義

constants.h 

文件並將其包含在需要的地方?

+0

以及像fstream和iostream這樣的依賴關係,我是否應該在必要時將它們包含在實現文件中?但是使用#ifndef預處理器確保沒有任何內容被複制多次?感謝您的想法constants.h。 – user1768079 2013-04-06 10:55:14

+0

它取決於你的h文件是否也使用流/ iostream中的定義;如果他們沒有(或者你可以轉發聲明他們),那麼最好只包含來自cpp文件的h文件,因爲它會減少你的依賴關係圖(參見Lakos)。 – sergio 2013-04-06 10:58:03

1

我的看法是,每個頭文件應該可以包含在程序員不必記住還包括什麼。這並非總能實現,但我認爲這是一個很好的規則。換句話說,如果「storage.h」需要在「song.h」中聲明的東西,那麼它應該包含「song.h」 - 這樣,使用「storage.h」的人也不需要記住包含「song.h」。

如果說「storage.h」也使用了「fstream」中的內容,那麼它應該包含「fstream」。

換句話說,如果在一個文件中包含「storage.h」,這就是使用「存儲」類所需要做的所有事情。

+0

謝謝,我也是這麼想的,但我對C++很陌生,不確定這個約定是什麼。 – user1768079 2013-04-06 11:20:14