静态对象c ++"没有命名类型"

时间:2015-08-07 21:05:04

标签: c++ static

我有以下代码:

// 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没有命名类型

3 个答案:

答案 0 :(得分:3)

没有课程Mid;还没有名为Mid的{​​{1}}成员。

但是,有一个班级m_mid和一个班级Outer::Mid,其成员名为Outer::Inner。写下那些。 :)

m_mid

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

  1. ;在每个班级定义的最后都错过了
  2. 构建是私有的,但应该是公开的
  3. 声明m_mid; 时会错过
  4. 名称空间

    修复后,以下工作

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