我创建了一个标题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'
我无法弄清楚该怎么做,可以吗?
谢谢。
答案 0 :(得分:2)
我假设Nasci
是Persona
的方法,因此您的方法定义应如下所示:
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
的方法。