本文描述了兩個常見但是很容易忽略和出錯的問題
a.error C2275 將此類型用作表達式非法
b.>LINK : fatal error C1007: 無法識別的標誌“-FitObjData”(在“p2”中)
1.1.問題描述:
問題是這樣的,合作伙伴發來一段測試代碼,是c寫的,部分代碼如下:
void main(void)
{
long id = 0;
char Serial[256] = { 0 };
char calHD[256] = { 0 };
id = getHComputerID(Serial, calHD);
printf("SerialNo:%s\r\n", Serial);
getchar();
data Trough_call;
int result;
float min, sec;
Trough_call.na = 2011;
......
我在自己的機器上跑,編譯未通過,在data Trough_call行報錯error C2275 將此類型用作表達式非法
問了一下合作伙伴,他的是能編譯通過跑起來的,進一步溝通發現他用的是vs2015,而我用的vs2010。
是版本的差異導致的?
1.2問題分析
後來仔細看了一下,突然想到了一條c語言和c++的區別。
c語言變量的定義位置需要在函數塊的最前面,而C++卻沒有這個限制,我的2010版本調用了c編譯器來編譯,所以報錯了,可能2015使用了c++的規則。
於是使用了兩種方法來解決。
1.2.1.我將後綴改成cpp,編譯,不再報這個錯誤了。
1.2.2修改代碼
void main(void)
{
long id = 0;
char Serial[256] = { 0 };
char calHD[256] = { 0 };
data Trough_call;
int result;
float min, sec;
id = getHComputerID(Serial, calHD);
printf("SerialNo:%s\r\n", Serial);
getchar();
Trough_call.na = 2011;
......
也不再報這個錯誤
2.可是又報了錯誤>LINK : fatal error C1007: 無法識別的標誌“-FitObjData”(在“p2”中)。
這個一搜索就知道了原因,使用了高版本的編譯。
反饋給合作伙伴,他用vs2010編譯了庫,解決。