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:试试,试试,知道@比特莫:是的 请再说一遍我的答案!