2009年9月23日

避免多重定義的技巧

有個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月16日

const member in class

假設有個class 裡面有個成員具備const屬性,則此const成員必須在initialization list內做初始化。

class A{
public:
A(){};
private:
const int constant1;
const int constant2;
};

A::A(): constant1(123), constant2(456)
{
...
}

2009年8月20日

有點不真實的感覺 for meeting

今天meeting,老師終於說估計我九月到十月可以口試,在這之前她也這樣跟我說了很多次類似的話... 所以我還是保留態度。另外她問我Demo 打算要怎麼辦,我猜她是因為沒有看我寫給她的論文才這樣問我 (可能懶的看我的東西吧,七八十頁欸),其實之前我有弄好一個Demo,可是她不喜歡,另外寫了一個Demo scenario給我,結果我遲遲沒做,一直不想理她,應該是自己有點不爽吧。現在她突然要我拿新的Demo給她看,我當然沒有,一切都要重新來,老師說很簡單,用嘴巴說都嘛很簡單 ... 新的任務就是下禮拜要另外拿個Demo去見她,很挫,還是得面對,我還是想完成我的學業。

另外一件事情,老師說學弟可以跟我一起口試,就我所知,學弟論文的進度還遠遠落在我後面,要怎麼口試呢?所以我還蠻懷疑可不可以,有新結果的話下回分曉。