[英]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.