繁体   English   中英

C函数调用C ++类命名空间

[英]C function calls in C++ class namespace

我试图通过一个项目熟悉C ++,但是我遇到了一个错误,我不太清楚如何处理。 我有以下代码:

void myclass::write(std::string str) {
  write(filedes, (void *)str.c_str(), str.length());
}

其中filedes是myclass的实例变量。 尝试编译它会产生错误:

myclass.cpp: In member function ‘void myclass::write(std::string)’:
myclass.cpp:38: error: no matching function for call to ‘myclass::write(int&, void*, size_t)’
myclass.cpp:37: note: candidates are: void myclass::write(std::string)
myclass.hpp:15: note:                 void myclass::write(std::string, int)

那么我做错了什么? 我可以合法地从方法中调用此函数吗?

想必要调用write(2) ,它位于全局命名空间中:

::write(filedes, str.c_str(), str.length());

(您可能需要#include <unistd.h> )。

看起来编译器不知道全局write函数。 你是否包含了正确的标题(unix中的<unistd.h> )? (另外,那个(void *)演员也没用。)

filedes不是类的实例变量(不是类的实例),而是类的int的类的成员,正如我从编译器错误中看到的那样。 如果要从全局命名空间调用函数,并使用与其中的方法相同的名称,请使用:: write(...)。 顺便说一下:使用std :: size_t作为长度,而不是int。

编译器认为写是你的类方法,它不是。 如果你在谈论系统调用写,你应该#include unistd.h并使用:: write(filedes,(void *)str.c_str(),str.length());

它取决于什么是写函数,如果它是一个系统函数然后你必须使用:: write,如果它在其他一些代码中确保你把extern,使用头或实现该函数的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM