報錯:
screenshot.o:在函數‘OnvifClientDevice::GetDNS(_tds__GetDNSResponse&)’中:
screenshot.cpp:(.text+0x390): multiple definition of `OnvifClientDevice::GetDNS(_tds__GetDNSResponse&)'
ptzcontrol.o:ptzcontrol.cpp:(.text+0xa0):第一次在此定義
問題調查:
一個頭文件 a.h 中函數聲明且定義了,也就是
bool foo(int i){
return i = 42;
}
這時候在 b.h 和 c.h 中都include a.h,盡管有#ifdef來保護,但是還是會報上面的錯
問題解決:
兩個辦法,(1)在函數的名稱之前增加inline關鍵字(2)將函數的定義放到.cpp中,並且在.h中聲明之前加inline
我用的方法1,很好用