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";
当我使用外部::内部类进行编译时,没有名为“`var”的成员时会出现此错误。
发布于 2009-01-28 01:33:03
内部类是定义它的类的朋友。
所以,可以;类型为Outer::Inner
的对象可以访问类型为Outer
的对象的成员变量var
。
与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();
}
发布于 2009-01-28 01:34:13
内部类可以访问外部类的所有成员,但它没有对父类实例的隐式引用(与Java的一些奇怪之处不同)。因此,如果将对外部类的引用传递给内部类,则它可以引用外部类实例中的任何内容。
发布于 2012-02-20 23:08:11
var不是内部类的成员。
要访问var,应该使用指向外部类实例的指针或引用。例如,如果内部类是外部类的朋友,则pOuter->var将起作用,或者,如果严格遵循C++标准,则var是公共的。
一些编译器将内部类视为外部类的朋友,但有些则可能不是。请参阅this document for IBM compiler
“在另一个类的作用域中声明嵌套类。嵌套类的名称是其封闭类的局部名称。除非您使用显式指针、引用或对象名,否则嵌套类中的声明只能使用可见的结构,包括类型名称、静态成员、封闭类的枚举器和全局变量。
嵌套类的成员函数遵循常规访问规则,并且对其封闭类的成员没有特殊访问权限。封闭类的成员函数对嵌套类的成员没有特殊访问权限。“
https://stackoverflow.com/questions/486099
复制相似问题