命名空间类和结构

时间:2009-06-18 15:17:40

标签: c++ namespaces

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

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

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

  struct myStruct{
  //...
  };
}

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

1 个答案:

答案 0 :(得分:6)

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

之前
struct myStruct;

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