kal*_*kal 108 c++ inner-classes
class Outer {
class Inner {
public:
Inner() {}
void func() ;
};
private:
static const char* const MYCONST;
int var;
};
void Outer::Inner::func() {
var = 1;
}
const char* const Outer::MYCONST = "myconst";
Run Code Online (Sandbox Code Playgroud)
当我使用类Outer :: Inner'编译时,这个错误输出没有名为`var'的成员
Mar*_*ork 112
内部类是在其中定义的类的朋友.
所以,是的; 类型的对象Outer::Inner可以访问成员变量var类型的对象的Outer.
但与Java不同,类型Outer::Inner对象与父类对象之间没有相关性.您必须手动创建父子关系.
#include <string>
#include <iostream>
class Outer
{
class Inner
{
public:
Inner(Outer& x): parent(x) {}
void func()
{
std::string a = "myconst1";
std::cout << parent.var << std::endl;
if (a == MYCONST)
{ std::cout << "string same" << std::endl;
}
else
{ std::cout << "string not same" << std::endl;
}
}
private:
Outer& parent;
};
public:
Outer()
:i(*this)
,var(4)
{}
Outer(Outer& other)
:i(other)
,var(22)
{}
void func()
{
i.func();
}
private:
static const char* const MYCONST;
Inner i;
int var;
};
const char* const Outer::MYCONST = "myconst";
int main()
{
Outer o1;
Outer o2(o1);
o1.func();
o2.func();
}
Run Code Online (Sandbox Code Playgroud)
MSN*_*MSN 28
内部类可以访问外部类的所有成员,但它没有对父类实例的隐式引用(与Java的一些奇怪之处不同).因此,如果将对外部类的引用传递给内部类,它可以引用外部类实例中的任何内容.
任何属于 Outer的东西都应该可以访问所有Outer的公共或私人成员.
编辑:你的编译器是正确的,var不是Inner的成员.但是如果你有一个引用或指向Outer实例的指针,它就可以访问它.