我正在经历classes
并考虑做嵌套类。所以我有下面的类声明。
class myClass {
public:
void method1() {
cout << "This is method 1" << endl;
}
class myClass2 {
void method2() {
cout << "This is method 2" << endl;
}
};
};
正如您所看到的,myClass
中有method2
方法。下面的代码运行正常,并为我提供了所需的输出。
myClass obj;
obj.method1();
但是当我尝试这个时:
obj.method2();
我收到错误消息method2 is not a member of myClass
。
问题:
from objects of class
myClass`? method2
?对于问题2,我考虑在myClass2
中创建类myClass
的对象,然后在myClass
中创建另一个函数来访问method2
函数。
我想知道是否还有其他出路,因为我的方式似乎有点痛苦。
答案 0 :(得分:1)
1)因为Class2()
不是myClass
的成员。
2)您需要实例化myClass::myClass2
对象并在其上调用成员。 myClass2::Class2()
是一个成员函数,因此它需要一个对象来操作。例如
myClass::myClass2 obj;
obj.Class2();
请注意,这需要您使myClass2::Class2()
成为公共成员。它在您的代码中是私有的。
答案 1 :(得分:1)
将class2
放在class1
内的效果比你想象的要少。它只是把它放在class1
的范围内。
所以,想象同样的事情但不嵌套:
class myClass
{
public:
void Class1()
{
cout<<"This is Class 1"<<endl;
}
};
class myClass2
{
public:
void Class2()
{
cout<<"This is Class 2"<<endl;
}
};
...
// and this should look normal to you:
myClass obj;
obj.Class1();
myClass2 obj2;
obj2.Class2();
现在将myClass2
放在myClass
范围内,就像你一样,看看最后几行如何变化。
class myClass
{
public:
void Class1()
{
cout<<"This is Class 1"<<endl;
}
class myClass2
{
public:
void Class2()
{
cout<<"This is Class 2"<<endl;
}
};
};
...
myClass obj;
obj.Class1();
myClass::myClass2 obj2;// this is the only thing that changes. You put myClass2 in a different scope.
obj2.Class2();
所以直接回答你的问题:
1)为什么我无法使用myClass obj访问函数Class2。
因为Class2
不是myClass
的成员。它是myClass2
的成员,您需要像对myClass
一样进行实例化。
2)有没有办法访问Class2功能。
是的,通过实例化myClass2
,就像在我的示例末尾:myClass::myClass2 obj2; obj2.Class2();
。