Προς το περιεχόμενο

C++ βοήθεια


papadakn

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω την εξής απορία σε μια εργασία C++ που ασχολούμαι τον καιρό αυτό.

 

Έχω μια κλάση (έστω κλάση 1). Αυτή έχει 2 συναρτήσεις, τις Α και Β. Στην Α, δημιουργώ 5 αντικείμενα μια άλλης κλάσης και στη συνέχεια τους αναθέτω τιμές (σε πίνακα). Θέλω η Β συνάρτηση να έχει πρόσβαση στα αντικείμενα αυτά ώστε να μπορώ να εφαρμόσω διάφορες άλλες συναρτήσεις (min/max value, sort κλπ).

 

Πως μπορεί να γίνει αυτό?

 

Ευχαριστώ εκ των προτέρων

Δημοσ.

Αν κατάλαβα καλά τα αντικείμενά σου τα έχεις περάσει σε ένα πίνακα.Ή όχι;Πάντως αν περάσεις τα αντικείμενα σε έναν πίνακα μπορείς να τα χρησιμοποιήσεις από τη συνάρτηση Β αν περάσεις τον πίνακα σαν όρισμα στη συνάρτηση.Εναλλακτικά μπορείς να τον δηλώσεις και static και δεν χρειάζεται να τον περνάς σαν όρισμα.Αυτά αν έχω καταλάβει καλά αυτό που αναφέρεις παραπάνω!!!

Δημοσ.

apo oti katalaba gia na exei prosbasi mia sinartisi mias klasis sta antikeimena mias alli klasis prepei na antikeimena tis deuteris klasis na einai public. an thimamai kala

 

We use these keywords to specify access levels for member variables, or for member functions (methods).

 

* Public variables, are variables that are visible to all classes.

* Private variables, are variables that are visible only to the class to which they belong.

* Protected variables, are variables that are visible only to the class to which they belong, and any subclasses.

 

otan les antikeimena auto ennoeis?

Δημοσ.

diaforoi tropoi....p.x.

1) kaneis public ta members afta

2) ta kaneis private i protected kai epistrefeis ta antikeimena afta mesw mias public function

3) kaneis tin mia class friend tis allis

proteinw tous tropous 2 kai 3...

Δημοσ.

Καταρχάς ευχαριστώ για τις απαντήσεις σας.

 

Αντικείμενα = objects δηλαδή αντικείμενα μιας κλάσης.

 

Θα προσπαθήσω να εξηγήσω ο πρόβλημα και πάλι αφού δεν καταφέρνω να βρω λύση.

 

Έχω μια κλάση που ονομάζεται stations με διάφορες private μεταβλητές. Σε μια άλλη κλάση που λέγεται controlcenter έχω δυο συναρτήσεις, την init_controlcenter και την UserInterface.

 

Στην init_controlcenter δηιμουργώ δύο αντικείμενα Stations με όνομα Rodos και Chania. Επίσης δλινω τιμές στις private μεταβλητές του κάθε αντικειμένου (temperature, humidity κτλ). Το πρόβλημα είναι πως όταν θέλω να καλέσω το object Rodos απο την συνάρτηση UserInterface πέρνω τα μηνύματα:

 

error C2065: 'Rodos' : undeclared identifier και

error C2228: left of '.Average_Temp' must have class/struct/union type is ''unknown-type''

 

Προφανώς, αν καταργήσω την δεύτερη συνάρτηση και ενσωματώσω τον κώδικα στο σώμα της πρώτης, το πρόγραμμα τρέχει κανονικά.

 

Ποια είναι η λύση? Δοκίμασα να ορίσω τις κλάσεις ως friends αλλά τα ίδια.

Δημοσ.

πρέπει η A και η Β να μπορούν και οι δύο να δούν τα αντικείμενα,

οπότε βάλτα μέσα στην κλάση των Α,Β και τα αρχικοποιείς στον constructor

 

>
class elarepaidimou {
 
  alliclass x,y,z;
  void A();
  void B();
}

 

αν έβαζες λίγο κώδικα θα βοήθαγε (μέσα σε code brackets)

Δημοσ.

δεν εχει να κανει με τα permissions (public, private etc)

 

αν κανεις (οπως υποθετω ) κατι σαν αυτο:

>
class controlcenter
{
   void init_controlcenter()
   {
       stations Rodos,Chania;
       // ... do stuff with Rodos and Chania
   }
}

 

τοτε το Rodos και Chania ειναι πλεον τοπικες μεταβλητες της συναρτησης init_controlcenter και μετα την ολοκληρωση της παυουν να υφιστανται.

Ακομα χειροτερα αν κανεις

 

>
class controlcenter
{
   void init_controlcenter()
   {
       stations* Rodos = new stations();
       stations* Chania = new stations();
       // ... do stuff with Rodos and Chania
   }
}

 

τοτε μετα το περας της init_controlcenter οι pointers Rodos & Chania παυουν να υπαρχουν αλλα η μνημη στη οποια "δειχνουν" δεν ελευθερωνεται και ουτε εχεις τροπο να την ελευθερωσεις. Εχεις λοιπον memory leak.

 

Για να συνεχισουν να υπαρχουν οι Rodos + Chania μετα το περας της init_controlcenter, πρεπει ειτε να της δηλωσεις αρχικα ως attributes της controlcenter (οποτε οποιαδηποτε συναρτηση της θα εχει προσβαση σε αυτες) ειτε να τις περνας ως ορισμα στην UserInterface οπως προειπαν τα παιδια. Υποθετοντας πως η UserInterface θα κανει παρομοια πραγματα και με αλλες stations, η δευτερη λυση ειναι μαλλον προτιμοτερη

Δημοσ.

Ευχαριστώ πολύ για τις απαντήσεις σας, το πρόβλημα λύθηκε και το project παραδώθηκε :)

 

Για την ιστορία, δημιούργησα τα Rodos, Chania στον constructor της κλάσης οπότε όλες οι συναρτήσεις είχαν πρόσβαση σε αυτά.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...