1

是否可以访问其类之外的非静态数据成员?假设您有如下示例。我知道作为示例没有多大意义,但我只想了解如何访问非静态数据成员。如果编译以下内容,则会产生错误:

 C.h|70|error: invalid use of non-static data member ‘C::age’|

//通道

class C{
  public:
    int age;
};
 int getAge();

//C.cpp

C::C()
{
    age  = 0;
}
int getAge(){
   return (C::age);
}
4

3 回答 3

3

非静态成员依赖于实例。它们在初始化有效实例时被初始化。

您的示例的问题在于,它尝试通过类接口访问非静态成员,而无需先初始化具体实例。这是无效的。

你可以做到static

class C{
public:
    static int age;
};

这需要您age在运行时使用之前还定义:int C::age = 0. 请注意,C::age如果使用此方法,可以在运行时更改 的值。

或者,您可以制作它const static并直接初始化它,如下所示:

class C{
public:
    const static int age = 0;
};

在这种情况下, 的C::age值为const

两者都可以让您在没有实例的情况下获得它:C::age.

于 2013-03-17T19:56:17.267 回答
3

Without making it static, you would have to create a value:

Either an lvalue:

C c;

return c.age;

or an rvalue:

return C().age;
// or
return C{}.age;

The problem with your code is that you try to access the age member without creating an instance of the class. Non-static data members of a class are only accessible through an instance of the class, and in your case no instance is created.

于 2013-03-17T19:57:14.313 回答
1

你不能这样做的原因是因为局部变量是在运行时分配到堆栈上的——如果你真的想使用一些内联 asm,你可以获得它的位置,但它需要一些调试才能获得堆栈位置和更高版本(在函数)你越想访问它,它就越有可能被其他东西覆盖。

于 2013-03-17T23:30:17.977 回答