代码之家  ›  专栏  ›  技术社区  ›  jassuncao

在C++中用一个方法调用一个类中的非成员函数

c c++
  •  12
  • jassuncao  · 技术社区  · 16 年前

    我有一个名为 打开 并且需要调用在C中声明的函数 打开 . 遵循示例:

    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 编译没有问题。

    我怎样才能解决这个问题。 事先谢谢。

    4 回复  |  直到 8 年前
        1
  •  34
  •   unwind    16 年前

    呼叫

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

    双结肠( :: )在函数名为C++之前 scope resolution operator :

    如果放置了分辨率运算符 在变量名前面,然后 全局变量受到影响。

        2
  •  8
  •   Thomas    16 年前

    ::open 而不是 open . 这个 :: 前缀表示名称应取自全局范围。(全局命名空间?老实说,我不确定它的确切含义……)

        3
  •  4
  •   rlbond    16 年前

    添加 “:” 之前 open (_portName.c_str(), O_RDWR | O_NOCTTY );

        4
  •  0
  •   Alphonse Kurian    8 年前

    确保:

    1)如果正在调用的函数和函数位于不同的命名空间(包括父命名空间)中,则使用命名空间解析。

    2)如果调用函数是在上面定义的,则在调用函数之前声明该函数。 如:

     void bar();
    
     void foo()
     {
      bar();
     }
    
    void bar()
    {
     ....
    }