Вызовы функций C в пространстве имен классов C ++

Я пытаюсь познакомиться с 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)

Так что я делаю не так? Могу ли я по закону сделать этот вызов функции из метода?

1

Решение

Предположительно вы хотите позвонить write(2), который находится в глобальном пространстве имен:

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

(вам может понадобиться #include <unistd.h>).

4

Другие решения

Похоже, компилятор не знает о глобальном write функция. Вы включили правильные заголовки (<unistd.h> в unix)? (Также, что (void *) бросок бесполезен.)

0

filedes — это не переменная экземпляра вашего класса (не экземпляр вашего класса), а член вашего класса с типом int, как я вижу из ошибки компилятора. Если вы хотите вызвать функцию из глобального пространства имен с тем же именем, что и у метода, используйте :: write (…). Кстати, используйте std :: size_t для длины, а не int.

0

Компилятор считает, что write — это ваш метод класса, и это не так. Если вы говорите о записи системного вызова, вы должны #include unistd.h и использовать :: write (filedes, (void *) str.c_str (), str.length ());

0

это зависит от функции записи, если это системная функция, то вы должны использовать
:: write, если это в каком-то другом коде, убедитесь, что вы поставили extern, используйте заголовок или код, который реализует функцию

0
По вопросам рекламы [email protected]