命名空间类和结构

1 c++ namespaces

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

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

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

  struct myStruct{
  //...
  };
}
Run Code Online (Sandbox Code Playgroud)

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

Tyl*_*nry 6

您在声明之前尝试使用类型名称myStruct.将整个结构定义放在typedef之前,或者将此声明放在typedef之前:

struct myStruct;
Run Code Online (Sandbox Code Playgroud)

这被称为"前瞻性声明".它告诉编译器稍后会有一个具有该名称的类型,但是没有确切地说明该类型是如何定义的.