在下面的代码中,当我尝试使用实例化对象访问 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'
这就是语法的工作方式。 该上下文中的Integer
是属于 Types
命名空间的类型,如果要访问该类型,则必须使用 ::
。 operator.
用于对象或函数的成员访问。
operator.
允许您访问属于实例的成员,同时::
遍历命名空间(允许您访问静态字段、静态函数、typedefs、成员变量等)。