无法从类函数访问类变量

时间:2012-12-04 02:35:52

标签: c++ class non-static

我创建了一个标题Persona.h,在Persona.cc中我正在初始化类的所有变量和函数,为什么我不能从Persona.cc访问变量?

Persona.h

#ifndef STD_LIB_H
#include <iostream>
#endif
#ifndef STD_LIB_H
#include <string>
#endif

class Persona
{
    private:
        std::string Nome;

    public:
        Nasci(std::string);
};

Persona.cc

#ifndef Persona_h
#include "Persona.h"
#endif

#ifndef STD_LIB_H
#include <string>
#endif

void Persona::Nasci(std::string nome)
{
    // Nome della persona

    Nome = nome;
};

它给了我一个错误:

invalid use of non-static data member 'Persona::Nome'

我无法弄清楚该怎么做,可以吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

我假设NasciPersona的方法,因此您的方法定义应如下所示:

void Persona::Nasci(std::string nome)
{
    // Nome della persona
    Nome = nome;

    //...rest of the function
}

否则,如果Nasci不是Persona类类型的方法或友元函数,则无法访问函数体内Persona类的私有数据成员,即使您已尝试使用命名空间范围解析。

通常,当您看到对您在其他独立函数体内的数据对象或函数上使用命名空间范围解析的代码时,该数据成员或函数是非私有static方法或特定类的数据成员,因此对其他非类函数可见。当然,C ++中的范围解析运算符还有许多其他用途,但只是说在您的情况下,需要Nome成为非私有static数据成员以避免编译器错误。当然,以这种方式使用Nome不适合您的使用场景,所以您真正想要的是上面的代码段,您将Nasci指定为Persona的方法。