2017-05-16 25 views
0

nameの派生クラスaからクラスbにアクセスできません。どうやってやるの?私は唯一のクラスbで機能を使用することができますが、クラスaから値にアクセスすることはできませんC++の派生クラスから値を取得する方法

#include<iostream> 
#include<string> 
using namespace std; 

class a 
{ 

public: 
    void getname() 
    { 
     string name; //trying to access value from other child class 
     cout << "enter your name" << endl; 
     getline(cin, name); 
     cout << " your name is " << name << endl; 
    } 
}; 
class b: public a 
{ 
    int age; 

public: 
    void old() 
    { 
     cout << "enter your age" << endl; 
     cin >> age; 
     cout << "your age is" << age << endl; 
    } 
    void print() 
    { 
     cout << " your name is " << name << endl; //cant access it 
     cout << "your age is" << age << endl; 
    } 
}; 

int main() 
{ 
    b o; 
    o.getname(); 
    o.old(); 
    o.print(); 
    return 0; 
} 

+1

問題のテキストとしてのコードを投稿してください。これは、人々が自分でテストすることを容易にします。 – DeiDei

+1

ありがとうありがとうございました –

+3

'name'はインスタンスフィールドではありません。あなたの関数には**ローカル変数**があり、アクセスする方法はありません。インスタンスフィールドであることを意図していたら、その定義を 'getname'関数の外に移動してください。 –

答えて

1

をクラスメンバではなくgetname()関数内に宣言しました。関数内で宣言された変数はブロックスコープを持ちます。つまり、関数の外に存在しなくなります。範囲はもう少しです。 http://en.cppreference.com/w/cpp/language/scopeこれは、クラスのスコープ/クラスのメンバーにとっても役に立ちます。

は、このようなクラスを変更してみてください:

class a { 
    protected: 
     string name; 
    public: 
     void getname() { 
      cout << "enter your name" << endl; 
      getline (cin,name); 
      cout << " your name is " << name << endl; 
    } 
}; 
+0

すでに実際には私の最初のプログラムですが、まだエラーが表示されています –

+0

私の答えは私的なメンバーとして名前を持っていたことに気がつきました。 getname()にもnameを宣言しないことが重要です。 – lolsborn

+1

私はそこに私のエラーを通知してくれてありがとう私は本当に公共の保護されたプライベートの使用を検討する必要があります –

関連する問題