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

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

Δημοσ. (επεξεργασμένο)

EDIT: Το πρόβλημα λύθηκε  :) Ευχαριστώ πολύ για τη βοήθειά σας!!

 

Καλησπέρα,

Ασχολούμαι με ένα project στο οποίο έχω δημιουργήσει δύο classes! Η μία class(ας την ονομάσουμε Α) έχει κάποιες public member functions μέσα της και η άλλη(ας την ονομάσουμε Β) έχει ένα private array και κάποιους accessors για τα πεδία του array!

 

Αρχικοποιώ λοιπόν ένα object μέσα στον constructor της class Β, και θέτω με αυτό τον τρόπο τα πεδία του array:

 

B::myArray[5][6] =

{

     A_obj.function_one, //.... και πάει λέγοντας

};

 

Το πρόβλημα όμως είναι, ότι στο compilation μου πετάει σφάλμα στις γραμμές με τα πεδία του array, και λέει ότι το A_obj δεν βρέθηκε... Παρόλα αυτά περνάει τη γραμμή στην οποία αρχικοποιώ το object. Και μάλιστα άμα καλέσω μία function για τεστάρισμα ( αν καταφέρνει να περάσει από εκεί) , δουλεύει μια χαρά!

 

Τι πρόβλημα μπορεί να υπάρχει? 

 

Επίσης, αυτή τη στιγμή δεν μπορώ να δώσω τον κώδικα γιατί θα πρέπει να κάνω αρκετές μετατροπές και αυτό μπορεί να προκαλέσει σφάλματα...

 

Ευχαριστώ!

 

EDIT: Το πρόβλημα λύθηκε  :) Ευχαριστώ πολύ για τη βοήθειά σας!!

Επεξ/σία από ICheats
Δημοσ.

Θα δοκίμαζα

1. Να φτιάξω μια setter method και να την καλώ στον constructor

2. Να χρησιμοποιήσω τη σύνταξη

class A {

  private myArray[2][2]

  A(): myArray({{1,2},{3,4}}) {}

}

 

Τώρα για το τι πρόβλημα υπάρχει και εγώ τώρα μαθαίνω c++ οπότε δεν μπορώ να σε βοηθήσω παραπάνω σε αυτό.

Δημοσ.

Παιδιά, σας ευχαριστώ και τους δύο για τη γρήγορη απάντησή σας, μα δεν μπορώ να καταλάβω τι ακριβώς προσπαθείτε να κάνετε...

 

Ειδικότερα:

 

Θέλει να ορίσεις ένα πεδίο τύπου class A μέσα στην class B και να το αρχικοποιήσεις μέσα στον constuctor της Β με new().

 

Δεν μπορώ να καταλάβω τι μου συστήνεις να κάνω και πώς να το εκφράσω σε κώδικα...

 

Θα δοκίμαζα

1. Να φτιάξω μια setter method και να την καλώ στον constructor

2. Να χρησιμοποιήσω τη σύνταξη

class A {

  private myArray[2][2]

  A(): myArray({{1,2},{3,4}}) {}

}

 

Τώρα για το τι πρόβλημα υπάρχει και εγώ τώρα μαθαίνω c++ οπότε δεν μπορώ να σε βοηθήσω παραπάνω σε αυτό.

 

Δεν γνωρίζω τι ακριβώς έχεις κάνει στη γραμμή με τον κώδικα: A(): myArray({{1,2},{3,4}}) {}

Δημοσ.
public class A
{
  //κώδικας της A
}

public class B
{
  private A myAObject;
  
 //constructor της Β
 public B()
 {
   myAObject = new A();
 }

 //συνάρτηση της Β που χρησιμοποιεί το myAObject
 public bFunction()
 {
   myAObject.[όνομα μεθόδου από την Α]
 }
}

Για δοκίμασε έτσι

Δημοσ.
public class A
{
  //κώδικας της A
}

public class B
{
  private A myAObject;
  
 //constructor της Β
 public B()
 {
   myAObject = new A();
 }

 //συνάρτηση της Β που χρησιμοποιεί το myAObject
 public bFunction()
 {
   myAObject.[όνομα μεθόδου από την Α]
 }
}

Για δοκίμασε έτσι

 

 

Ευχαριστώ, το καταλαβαίνω τώρα, απλά έχω μια απορία! Δεν θα'πρεπε το myObject να είναι pointer? 

Το δοκίμασα σαν pointer και διορθώθηκαν κάτι σφάλματα!!

 

Ανεξάρτητα από αυτό, o compiler μου πετάει error: qualifiers can only be specified for objects and functions

Δημοσ.

Ποσταρε αυτο που εχεις κανει μπας και βγαλουμε ακρη. Ο κωδικας του nucl ειναι c# ή java.

 

Συγγνώμη αλλά δεν μπορώ να το κάνω αυτό, γιατί θα πρέπει να κάνω αρκετές αλλαγές και να αποκαλύψω κώδικα ο οποίος δεν είναι δικός μου και δεν μου επιτρέπεται!

Δημοσ. (επεξεργασμένο)

Τουλαχιστον προσπαθησε να δωσεις μια περιγραφη της προκοπης.

 

Λοιπόν, όπως το έχω αυτή τη στιγμή, είναι κάπως έτσι:

class A
{
  //κώδικας της A
};

class B
{
  private:
      A *myAObject;    //άλλαξα από κανονικό object σε pointer to object
  
 public: 
   B()
   {
     myAObject = new A();
   }

   //συνάρτηση της Β που χρησιμοποιεί το myAObject
   void bFunction()
   {
     myAObject -> [όνομα μεθόδου από την Α]
   }
};

το πρόβλημα προκύπτει στη γραμμή όπου γράφει: myAObject = new A();

 

και είναι το εξής error: qualifiers can only be specified for objects and functions

Επεξ/σία από ICheats
Δημοσ.

Βαλε ερωτηματικα στο τελος της καθε κλασεις. Επισης η bFunction πρεπει να επιστρεφει και κατι, εστω και void

  • Like 1
Δημοσ.

Βαλε ερωτηματικα στο τελος της καθε κλασεις. Επισης η bFunction πρεπει να επιστρεφει και κατι, εστω και void

 

Σωστά!! Το διορθώνω!! 

Δημοσ.

Βασικά δεν έχω ιδέα τι είναι μάλλον για C# μου φέρνει :P

 

Αφού άλλαξες το object σε pointer το myAObject.[όνομα μεθόδου από την Α] είναι λάθος δεν πρέπει να γίνει

 

myAObject->[όνομα μεθόδου από την Α]?

 

Σε dev-c++ το παρακάτω κάνει compile και run

#include <stdio.h>

class A
{
  public:
  void testfunc()
  {
    printf("called testfunc ths class A");
  }
};

class B
{
  private:
      A *myAObject;
 
  public:
  B()
  {
    myAObject = new A();
  }

  public:
  void bFunction()
  {
   myAObject->testfunc();
  }
};

int main()
{
     B *bObjectPointer = new B();
     bObjectPointer->bFunction();
     return 0;
 }
Δημοσ.

 

Βασικά δεν έχω ιδέα τι είναι μάλλον για C# μου φέρνει :P

 

Αφού άλλαξες το object σε pointer το myAObject.[όνομα μεθόδου από την Α] είναι λάθος δεν πρέπει να γίνει

 

myAObject->[όνομα μεθόδου από την Α]?

 

Σε dev-c++ το παρακάτω κάνει compile και run

#include <stdio.h>

class A
{
  public:
  void testfunc()
  {
    printf("called testfunc ths class A");
  }
};

class B
{
  private:
      A *myAObject;
 
  public:
  B()
  {
    myAObject = new A();
  }

  public:
  void bFunction()
  {
   myAObject->testfunc();
  }
};

int main()
{
     B *bObjectPointer = new B();
     bObjectPointer->bFunction();
     return 0;
 }

 

:D Μπορεί, πάντως το βελάκι δεν είναι το πρόβλημα, το διόρθωσα. Επίσης με g++ μου κάνει compile και run κι εμένα!! :( Περίεργο!!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...