考虑这个课程:
struct Foo {
int bar;
Foo(){}
Foo(int a) {
bar = a;
}
};
现在,我有两种方法可以访问成员bar
:
Foo foo(1234);
cout << foo.bar << endl;
cout << foo.Foo::bar << endl;
但我不知道foo.Foo
的类型是什么:
using namespace foo.Foo; //error, because foo.Foo is not a namespace
foo.Foo baz; //error, because foo.Foo is not a class
请告诉我什么是foo.Foo
。
答案 0 :(得分:3)
foo.Foo
不是什么。 Foo::bar
是bar
类的Foo
成员,foo.Foo::bar
是实例bar
中的Foo
成员foo
成员}}
如果您的名称与多重继承冲突,则通常使用该语法。考虑这个例子:
struct A{int bar;};
struct B{int bar;};
struct C:A,B{};
现在,以下代码含糊不清:
C c;
std::cout << c.bar;
我们需要说出我们想要的bar
:
C c;
std::cout << c.A::bar;
std::cout << c.B::bar;
答案 1 :(得分:1)
它不是(foo.Foo):: bar,它是foo。(Foo :: bar)和Foo :: bar是吧
这在这个例子中很有用:
struct A{
int i;
};
struct B{
int i;
};
class C : public A, B{
};
int main(){
C c;
c.i = 0; // request for member 'i' is ambiguous
}
您应该使用名称空间A和B来访问数据,A::i
或B::i
答案 2 :(得分:0)
默认情况下,struct的成员是公共的,所以你可以访问带有点和范围分辨率(::)运算符的memebrs.So foo.Foo::bar与foo.bar相同。