在下面的代码中,当我尝试使用实例化对象访问typedef时,它会给我一个错误,当我使用范围解析运算符(::)访问它时,程序运行正常。我只想知道原因。
#include <iostream>
class Types {
public:
typedef int Integer;
};
int main() {
Types types;
types.Integer foo = 1; // <-- Gives me an error
Types::Integer goo = 2; // <-- Works perfectly fine
std::cout << foo;
std::cout << std::endl;
std::cout << goo;
return 0;
}
我只是以此为例,这不是真正的代码。它给我的错误是:
Line 15 | invalid use of 'Types::Integer'
答案 0 :(得分:3)
这就是语法的工作原理。该上下文中的Integer
是属于Types
命名空间的类型,如果要访问该类型,则必须使用::
。 operator.
用于对象或函数的成员访问。
operator.
允许您访问属于实例的成员,而::
遍历名称空间(允许您访问静态字段,静态函数,typedef,成员变量等)。