2015-06-27 88 views
2

考慮下面的代碼片段:「無效純說明符」當我的意思是沒有純粹說明符?

class UltraProbe { 
public: 
    ConnectProbe *CP() { 
    return probes.CP; // if type == UP_CONNECT 
    } 
private: 
    probespec mypspec; /* Filled in by the appropriate set* function */ 
    union { 
    IPExtraProbeData IP; 
    ConnectProbe *CP; 
    // ArpProbe *AP; 
    } probes; 

}; 

bool do_one_select_round(UltraScanInfo *USI, struct timeval *stime) { 

    UltraProbe *probe = NULL; 
    int errno = (probe->CP()->connect_result); 

} 

爲什麼我會得到下面的錯誤?

scan_engine_connect.cc:592:22: error: invalid pure specifier (only ‘= 0’ is allowed) before ‘probe’ 
     int errno = (probe->CP()->connect_result); 
        ^

回答

6

errno是這也許是分解成一個功能的宏,因此我們必須像下面這樣:

int errno_func() = (probe->CP()->connect_result); 

所以編譯器把它作爲一種嘗試聲明函數。

+3

...解決方案正在_to不重用現有的庫名!!!! _ –

+0

嗯,我還沒有看到一個glibc實現,其中'errno'擴展爲函數調用。它應該是一個左值整數表達式。一些手冊頁實際上稱之爲變量。 –

+0

@LightnessRacesinOrbit我不記得在哪裏(可能在某個模糊的嵌入式平臺上),但是我已經看到'#define'd爲'(* __ errno_pointer())'。 –