使用对象而不是范围解析运算符 (::)) 访问类中的 typedef



在下面的代码中,当我尝试使用实例化对象访问 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、成员变量等)。

最新更新