【问题标题】:cant access class variable from class function无法从类函数访问类变量
【发布时间】:2012-12-04 02:35:52
【问题描述】:

我创建了一个头文件 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'

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

谢谢。

【问题讨论】:

  • 标记为private,你期待什么?
  • 请获取a book from here。如果你在没有掌握基本知识的情况下继续下去,你只会严重伤害自己。
  • 如果没有更多上下文很难判断问题出在哪里,但请尝试将方法声明更改为Persona::Nasci。否则编译器无法知道该函数是Persona的方法。
  • @DomeWTF:“......来自类函数”?您没有“类功能”。你有一个完全独立的、不相关的、独立的函数Nasci,它与类绝对无关。这是第一个问题。
  • #ifndef Persona_h #include "Persona.h" #endif #ifndef STD_LIB_H #include &lt;string&gt; #endif 不不不。这个逻辑进入 in 标头,包含器不应该跟踪这些东西。可以根据需要多次包含&lt;string&gt;,不要像那样混乱你的代码。而且你的头文件应该把自己包裹在包含保护中,而包含器只是简单地包含它。

标签: c++ class non-static


【解决方案1】:

我假设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 的方法。

【讨论】:

  • 您还必须将 Nasci 的声明添加到 Persona 类。
  • 由于 OP 没有完成类的声明(即类声明上没有右括号),我假设 Nasci 是他们简单决定的类的方法为简洁起见,不再列出,以免意外遗漏。但是是的,如果他们没有在类声明中包含 Nasci 的声明,他们也必须这样做。
猜你喜欢
  • 2017-05-18
  • 2014-06-04
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多