有個header file裡面定義了一個class,而此header file同時被另外兩個cpp 檔include,而此三個檔案編譯之後預計產生一個object code。此時就會有重複宣告的問題。
@common.h
class base_class{...};
@util.h
#include "common.h"
...
@main.h
#include "common.h"
#include "util.h"
int main(){
...
}
在header file內加上 #ifndef, #define與#endif可以解決這個問題,語法如下:
#ifndef
#define
... // header file內的所有source code
#endif
一般Label的規定為前後加上底線,字母全部大寫,並且把dot也變成底線,例如stdio.h:
#ifndef _STDIO_H_
#define _STDIO_H_
...
#endif
如此一來,preprocessor在展開source code的時候就不會有重複宣告的問題,因為util.cpp並不會include到common.h。建議是無論header file會不會被兩個以上的cpp include都加上macro,如此就可安心地include自己想要的header。
2009年9月23日
2009年9月16日
const member in class
Labels:
Computer Science
假設有個class 裡面有個成員具備const屬性,則此const成員必須在initialization list內做初始化。
class A{
public:
A(){};
private:
const int constant1;
const int constant2;
};
A::A(): constant1(123), constant2(456)
{
...
}
class A{
public:
A(){};
private:
const int constant1;
const int constant2;
};
A::A(): constant1(123), constant2(456)
{
...
}
2009年8月20日
有點不真實的感覺 for meeting
Labels:
閒聊
今天meeting,老師終於說估計我九月到十月可以口試,在這之前她也這樣跟我說了很多次類似的話... 所以我還是保留態度。另外她問我Demo 打算要怎麼辦,我猜她是因為沒有看我寫給她的論文才這樣問我 (可能懶的看我的東西吧,七八十頁欸),其實之前我有弄好一個Demo,可是她不喜歡,另外寫了一個Demo scenario給我,結果我遲遲沒做,一直不想理她,應該是自己有點不爽吧。現在她突然要我拿新的Demo給她看,我當然沒有,一切都要重新來,老師說很簡單,用嘴巴說都嘛很簡單 ... 新的任務就是下禮拜要另外拿個Demo去見她,很挫,還是得面對,我還是想完成我的學業。
另外一件事情,老師說學弟可以跟我一起口試,就我所知,學弟論文的進度還遠遠落在我後面,要怎麼口試呢?所以我還蠻懷疑可不可以,有新結果的話下回分曉。
另外一件事情,老師說學弟可以跟我一起口試,就我所知,學弟論文的進度還遠遠落在我後面,要怎麼口試呢?所以我還蠻懷疑可不可以,有新結果的話下回分曉。
訂閱:
文章 (Atom)

