代码之家  ›  专栏  ›  技术社区  ›  Bill the Lizard

C++类成员函数命名规则

  •  2
  • Bill the Lizard  · 技术社区  · 16 年前

    我试图把一些函数从C socket库封装到我自己的C++类中。我想定义一个成员函数,它使用与其对应的C函数相同的名称,但签名不同。例如,我想编写函数

    ssize_t MyClass::write(const void *buf);
    

    ssize_t write(int fd, const void *buf, size_t count);
    

    当我编译时,我得到以下错误

    error: no matching function for call to ‘MyClass::write(int&, const char*&, size_t)’
    note: candidates are: ssize_t MyClass::write(const char*)
    

    我有正确的答案 #include

    我确信,更改我的函数名将是我的最终解决方案,但是有人能告诉我导致这个行为的C++命名规则的名称吗?我想了解一下,这样我就知道我将来要做什么了。

    3 回复  |  直到 16 年前
        1
  •  6
  •   UncleZeiv    16 年前

    您是否尝试过调用C函数来明确它位于全局名称空间中,比如::write?

        2
  •  2
  •   Adam Rosenfield    16 年前

    This page 对C++中的名称查找规则进行了很好的描述。基本上,一旦编译器看到 write() 是类成员函数,它不查找同名的全局函数。然后报告一个错误,因为成员函数 写() 没有正确的参数数量和类型。一元范围解析运算符的使用 :: 写()

        3
  •  1
  •   ceo    16 年前