2

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

人物角色.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);
};

人物角色.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'

我不知道该怎么做,你能吗?

谢谢你。

4

1 回答 1

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以这种方式使用不适合您的使用场景,所以您真正想要的是上面您指定NasciPersona.

于 2012-12-04T02:38:04.570 回答