2016-06-03 3 views
1

Ich bin super neu in Klassen und immer noch mein Gehirn um, wie sie arbeiten. Jede Hilfe/Beratung/Hinweise-> werden geschätzt!Lernklassen C++ - Werte in einem Array von Klassen, die in einer anderen Klasse verschachtelt sind, können nicht festgelegt werden.

Ich habe zwei Klassen. Innerhalb der zweiten Klasse befindet sich ein Array der ersten Klasse. Ich versuche, den privaten Mitgliedsvariablen, die im Array der ersten Klasse enthalten sind, Werte zuzuweisen.

Ich erhalte diese Fehlermeldung beim Kompilieren:

hw2Test.cpp: In member function 'void bar::set(int)': 
hw2Test.cpp:11:7: error: 'int foo::x' is private 
    int x; 
    ^
hw2Test.cpp:34:12: error: within this context 
    foodoo[0].x = x; 
      ^

Hier ist der Code:

#include <iostream> 
using namespace std; 


class foo 
{ 
    public: 


    private: 
     int x; 
}; 

class bar 
{ 
    public: 
     void set(int x); 

    private: 
     foo foodoo[1]; 
}; 

int main() 
{ 
    bar tar; 

    tar.set(1); 

    return 0; 
} 

void bar::set(int x) 
{ 
    foodoo[0].x = x; 
} 

Antwort

1

foo::x als private deklariert wird, so dass nur Methoden der foo darauf zugreifen können. Aber Sie versuchen, auf x innerhalb einer Methode von bar stattdessen zuzugreifen, die keinen Zugriff auf private Mitglieder foo hat.

bar Zugang zu geben, müssen Sie entweder:

class foo 
{ 
    public: 
     int x; 
}; 

void bar::set(int x) 
{ 
    foodoo[0].x = x; 
} 
  • deklarieren eine public Setter:

    class foo 
    { 
        public: 
         void set(int i); 
    
        private: 
         int x; 
    }; 
    
    void foo::set(int i) 
    { 
        foodoo[0].x = i; 
    } 
    
    void bar::set(int x) 
    { 
        foodoo[0].set(x); 
    } 
    
  • erklären 012

    1. foo::x als public erklärenals friend von foo:

      class foo 
      { 
          public: 
      
          private: 
           int x; 
      
          friend class bar; 
      }; 
      
      void bar::set(int x) 
      { 
          foodoo[0].x = x; 
      } 
      
  • +0

    Es gibt eine dritte Option, bieten Accessormethoden. – bodangly

    +0

    Mit Zugriffsmethoden, meinst du, ein FX innerhalb der Bar anzurufen, die ein FX innerhalb von foo aufruft, damit ich foo's freche Bits erreichen kann? –

    +0

    @BuckWheat ja, genau –

    Verwandte Themen