Подтвердить что ты не робот

Вызов в С++ не член-функции внутри класса с методом с тем же

У меня есть этот класс с методом экземпляра с именем open и ему нужно вызвать функцию, объявленную в C, также называемую open. Выполняется выборка:

void SerialPort::open()
{
    if(_open)
        return;
    fd = open (_portName.c_str(), O_RDWR | O_NOCTTY ); 
    _open = true;
}

Когда я пытаюсь скомпилировать его (используя GCC), я получаю следующую ошибку:

error: no matching function for call to 'SerialPort::open(const char*, int)'

Я включил все необходимые заголовки C. Когда я меняю имя метода, например open2, у меня нет проблем с компиляцией.

Как я могу решить эту проблему. Спасибо заранее.

4b9b3361

Ответ 1

Вызов

fd = ::open(_portName.c_str(), O_RDWR | O_NOCTTY );

Двойной двоеточие (::) перед именем функции С++ оператор разрешения области видимости:

Если оператор разрешения помещен перед именем переменной, тогда глобальная переменная.

Ответ 2

Напишите ::open вместо open. Префикс :: указывает, что имя должно быть взято из глобальной области. (Глобальное пространство имен? Я не уверен в его точном значении, если честно...)

Ответ 3

добавить "::" до open (_portName.c_str(), O_RDWR | O_NOCTTY );

Ответ 4

Убедитесь, что:

1) Вы используете разрешение пространства имен, если вызывающая функция и вызываемая функция находятся в разных пространствах имен, включая родительское пространство имен

2) Если ваша вызывающая функция определена выше, вызываемая функция объявляет функцию перед функцией вызывающего абонента. например:

 void bar();

 void foo()
 {
  bar();
 }

void bar()
{
 ....
}