有個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)
{
...
}
訂閱:
文章 (Atom)