【问题标题】:static object c++ "does not name a type" [closed]静态对象c ++“没有命名类型”[关闭]
【发布时间】:2015-08-07 21:05:03
【问题描述】:

我有以下代码:

// header.h
class Outer
  {


       class Mid
        {
           Mid();
          ~Mid ();
        };

       class Inner
       {
           private:
               static Mid m_mid;
       };
   };

当我在 cpp 文件中定义静态私有对象时,它给了我一个错误,说 Mid 没有命名类型:

 // header.cpp:
  # include "header.h"
  Mid Mid::m_mid;
 {Begin definitions for Outer, Mid and Inner from here}

任何线索为什么编译器会抱怨这个? : Mid 没有命名类型

【问题讨论】:

  • 您在类声明的末尾忘记了分号
  • 哦,是的,我的代码中有它。这只是我快速想出的一个示例骨架。
  • @noobcoder 您应该始终发布给您带来问题的确切代码;如果您正在编写一个新的可重现示例(这是一个很好的做法),您应该运行它以确保。否则,你怎么知道它仍然给出错误? (如果重要的话,这也不是我的反对意见)
  • 不是我的反对意见,但无论如何,在发布问题时不要在示例代码中插入任意代码错误会有所帮助。否则,人们只会看到那些并继续前进。你应该编辑和修复它。
  • 我不赞成,因为坦率地说,这很愚蠢。没有理由期望这个定义能够成功编译,而且这个问题将来不会帮助其他任何人。

标签: c++ static


【解决方案1】:

没有类MidMid 的成员也没有名为 m_mid 的成员。

但是,有一个类 Outer::Mid,和一个类 Outer::Inner,它有一个名为 m_mid 的成员。写那些。 :)

Outer::Mid Outer::Inner::m_mid;

【讨论】:

  • 现在说得通了。 :)
  • @noobcoder:玩得开心!
【解决方案2】:

您必须完全限定类型名称和成员名称。

Outer::Mid Outer::Inner::m_mid;

【讨论】:

    【解决方案3】:

    这些错误与静态私有对象无关,因为以下原因而出现。

    1. ;在每个类定义的末尾都错过了
    2. 构造是私有的,但应该是公开的
    3. 声明 m_mid 时缺少命名空间;

    修复后,以下工作

    class Outer
    {
    public:
        class Mid
        {
        public:
           Mid(){}
           ~Mid (){}
        };
    
        class Inner
        {
        private:
            static Mid m_mid;
        };
    };
    int main(){
        Outer::Mid m_mid;
        return 0;
    }
    

    【讨论】:

    • 可以编译,有点没有定义静态成员;相反,您有一个未使用的同名局部变量。
    • 是的,你是对的。使用“外::中外::内::m_mid;”定义在 Inner 中声明为静态 Mid 的 m_mid
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2015-01-08
    • 2016-04-21
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多