2

ヘッダー 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);
};

ペルソナ.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、その方法での使用は使用シナリオに適合しないため、実際に必要なNasciのは、のメソッドとして指定する上記のコード セグメントですPersona

于 2012-12-04T02:38:04.570 に答える