声明C函数友类并返回C枚举数

Declare C function friend of class and return C enumerator

本文关键字:返回 枚举 函数 声明      更新时间:2023-10-16

这是非常类似于这个问题,然而,我试图交朋友的函数返回一个C枚举数。我看不清正确的语法:

#include <iostream>
extern "C" {
  enum X {ONE};
  int foo();
  X bar();
}
namespace a {
class A {
public:
  A(int a): a(a) {}
private:
  friend int ::foo();
  friend X ::bar();  // Doesn't work
  int a;
};
}
extern "C" {
 int foo() {
  a::A a(1);
  std::cout << a.a << std::endl;
  return ONE;
}
 X bar() {
  a::A a(2);
  std::cout << a.a << std::endl;
  return ONE;
}
}
int main()
{
  foo();  // outputs: 1
  bar();  // doesn't compile
}

friend X ::bar();不工作。正确的语法是什么?

在线演示
main.cpp:20:18: error: 'enum X' is not a class or a namespace
   friend X ::bar();
                  ^
main.cpp:20:18: error: ISO C++ forbids declaration of 'bar' with no type     [-fpermissive]
main.cpp: In function 'X bar()':
main.cpp:22:7: error: 'int a::A::a' is private
   int a;
       ^
main.cpp:35:18: error: within this context
   std::cout << a.a << std::endl;

尝试添加括号来解决解析歧义

friend X (::bar)();