【问题标题】:Namespace class and struct命名空间类和结构
【发布时间】:2009-06-18 15:17:40
【问题描述】:

我有一个如下所示的文件:

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

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

  struct myStruct{
  //...
  };
}

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

【问题讨论】:

    标签: c++ namespaces


    【解决方案1】:

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

    struct myStruct;
    

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

    【讨论】:

    • @ Malcolm - 几乎每个开始编写 C++ 的人都会在某些时候被前向声明问题所困扰。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2020-05-02
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多