C++中类内类的语法

C++中类内类的语法,c++,syntax,C++,Syntax,如果我有以下几点 class A { public: int stuff; void helper(B temp, int d); //what about here? I'm getting a 'B' has not been declared error here. private: class B { public: int stuffer;

如果我有以下几点

class A
    {
    public:
        int stuff;
            void helper(B temp, int d); //what about here? I'm getting a 'B' has not been declared error here.
    private:
        class B 
        {
        public:
            int stuffer;
        private:
            int x;
        };
    }:
在我的实现文件中引用类2的正确方法是什么?是吗
1::2::someMethod?或者2::someMethod?

首先,类名不能以整数开头。因此,重命名它们:

 class A
 {
    public:
        int stuff;
    private:
        class B 
        {
        public:
            int stuffer;
        private:
            int x;
        };
  };
第二,由于嵌套的类B位于私有部分,因此您不能从类A的范围之外访问它。B只能由A访问。声明类型为B的对象的语法为B bObj;在A的范围内

现在你应该先试试自己,然后再问更多的问题

至于你的编辑,增加了一个问题:它不是在编译,因为当编译器看到B temp时,它还没有看到B的定义,这就是为什么它说B没有声明

解决方法非常简单。在使用B之前声明它,类似这样:

class A
{
private:
        class B 
        {
        public:
            int stuffer;
        private:
            int x;
        };
    public:
        int stuff;
        void helper(B temp, int d);

 }; //<--- this is also fixed. your code has 'colon', instead semi-colon!

同时阅读课后的评论

首先,类名不能以整数开头。因此,重命名它们:

 class A
 {
    public:
        int stuff;
    private:
        class B 
        {
        public:
            int stuffer;
        private:
            int x;
        };
  };
第二,由于嵌套的类B位于私有部分,因此您不能从类A的范围之外访问它。B只能由A访问。声明类型为B的对象的语法为B bObj;在A的范围内

现在你应该先试试自己,然后再问更多的问题

至于你的编辑,增加了一个问题:它不是在编译,因为当编译器看到B temp时,它还没有看到B的定义,这就是为什么它说B没有声明

解决方法非常简单。在使用B之前声明它,类似这样:

class A
{
private:
        class B 
        {
        public:
            int stuffer;
        private:
            int x;
        };
    public:
        int stuff;
        void helper(B temp, int d);

 }; //<--- this is also fixed. your code has 'colon', instead semi-colon!

同时阅读课后的评论

如果您在类1的方法中,可以使用2::somemethod。在其他地方,使用1::2::somemethod。Inside包括类1的方法实现中的方法参数声明,但不包括类1的方法实现的返回值声明。

如果您在类1的方法中,可以使用2::somemethod。在其他地方,使用1::2::somemethod。内部包括类1的方法实现中的方法参数声明,但不包括类1的方法实现的返回值声明。

假设1和2引用真实的类名,1::2::methodName与任何其他嵌套作用域一样。

假设1和2引用真实的类名,1::2::methodName与任何其他嵌套作用域一样。

它取决于您所处的作用域级别。在类1的成员函数中,它将是类2::someMethod。在文件范围内,它将是类1::类2::someMethod。这样完全限定函数或变量名总是正确的,但有时它的类型比严格必要的多。通常,当编译器无法自己确定所引用的内容时,需要使用作用域解析运算符::


在实践中,最好的办法是尝试一下,看看会发生什么。如果编译器给您一个错误,请将类名放在前面,然后重试。

这取决于您所处的作用域级别。在类1的成员函数中,它将是类2::someMethod。在文件范围内,它将是类1::类2::someMethod。这样完全限定函数或变量名总是正确的,但有时它的类型比严格必要的多。通常,当编译器无法自己确定所引用的内容时,需要使用作用域解析运算符::


在实践中,最好的办法是尝试一下,看看会发生什么。如果编译器给您一个错误,请在前面抛出类名,然后重试。

嵌套类的语法:

Class class_name1
{  
    Private:
        Data members
    Public: 
        Member functions
        {
        .........
        }
        Class class_name2  //class2 is embedded with class1
        {
            Private:
                Data members
            Public: 
                Member functions
                {
                .........
                }
        };  // class2
};  //class1
嵌套类可以在另一个类中定义一个类,因为类声明定义了一个范围

嵌套类仅在封闭类的范围内有效


实际上不存在对嵌套类的需求。

嵌套类的语法:

Class class_name1
{  
    Private:
        Data members
    Public: 
        Member functions
        {
        .........
        }
        Class class_name2  //class2 is embedded with class1
        {
            Private:
                Data members
            Public: 
                Member functions
                {
                .........
                }
        };  // class2
};  //class1
嵌套类可以在另一个类中定义一个类,因为类声明定义了一个范围

嵌套类仅在封闭类的范围内有效


实际上不存在对嵌套类的需求。

1和2不是有效的类名。是的,我尝试过,但我有太多其他错误,所以我不确定什么可以追溯到什么,但我只是想知道官方对此的裁决。。注意:类B是私有的,不能从类外部访问。因此,公开使用B的方法“helper”不会有帮助。1和2不是有效的类名。是的,我尝试过,但我有太多其他错误,所以我不确定什么可以追溯到什么,但我只是想知道官方对此的裁决。注:类B是私有的,不能从类外部访问。因此,公开一个使用B的方法“helper”是没有帮助的?我可以在我的A.cpp文件中访问它吗?@bitmoe:试试,试试,知道@比特莫:再看看我的答案!什么意思?我可以在我的A.cpp文件中访问它吗?@bitmoe:试试,试试,知道@比特莫:是的 请再说一遍我的答案!