我有一个看起来像这样的文件:

namespace myName
{
  typedef HRESULT (*PFN_HANDLE)(myName::myStruct);

  class MyClass{
  //...
  public:
    BOOL RegisterCallback (PFN_HANDLE foo);
  //...
  };

  struct myStruct{
  //...
  };
}

但是我收到一个编译错误“myStruct”不是“myName”的成员。谁能告诉我发生了什么事?可以在我的头文件中声明一个结构,对吗?是 namespace 问题吗?很抱歉我这么密集。

最佳答案

您试图在声明之前使用类型名称myStruct。可以将整个struct定义放在typedef之前,或者将此声明放在typedef之前:

struct myStruct;

这就是所谓的“转发声明”。它告诉编译器以后会有一个具有该名称的类型,但没有确切说明该类型的定义方式。

关于c++ - 命名空间类和结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1013291/

10-13 04:06