类函数和非类函数的名称冲突

时间:2014-02-13 04:02:54

标签: c++ class networking

所以,在C ++中,我有一个类投票,它有一个发送功能,可以通过网络发送投票。类Vote中的此发送函数使用sys / socket.h中的send函数。当我编译时,我得到的错误基本上说它使用的是Vote :: send而不是sys / socket.h ::在Vote :: send中发送。如何解决此名称冲突?

2 个答案:

答案 0 :(得分:2)

使用scope resolution operator::)从全局范围引用send()函数,例如:

void Vote::send() {
        ::send(...); // Calls global send(). 
}

答案 1 :(得分:2)

你可以做不同的事情。您可以限定电话:

void Vote::send() {
   ::send(...);
}

或者您可以通过使用声明将命名空间级别功能纳入范围:

void Vote::send() {
    using ::send;
    send(...);
}

或者,如果它是一个命名空间函数并且它与Vote类位于同一个命名空间中,你也可以提供一个本地声明,尽管我会避免使用本地函数声明,因为它更容易获得签名错误:

void Vote::send() {
   int send(int, const void*, size_t, int);
   send(...);
}