я создал заголовок 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'
я не могу понять, что делать, не так ли?
Благодарю вас.
Я предполагаю, что 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
,
Других решений пока нет …