2015-06-27 103 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())'。 –