在具有对象的类中访问typedef,而不是范围解析运算符(::)

时间:2015-03-11 01:03:31

标签: c++ class 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'

1 个答案:

答案 0 :(得分:3)

这就是语法的工作原理。该上下文中的Integer是属于Types命名空间的类型,如果要访问该类型,则必须使用::operator.用于对象或函数的成员访问。

operator.允许您访问属于实例的成员,而::遍历名称空间(允许您访问静态字段,静态函数,typedef,成员变量等)。