2011-02-03 3 views
0

Ma question est comment accéder et modifier un tableau 2D défini dans une classe qui est ami avec une autre classe. Voici quelques détails sur ma question:Accéder à un tableau 2D entre deux classes d'amis

Dans class A Je déclare et alloue l'espace approprié pour ma matrice 2D (pointeur vers pointeur) u.

Class A 
{ 
    public: 
    friend class B; 
    long double **u; 
    int fun; 
    void make(); 
}; 
void A::make() 
{ 
    long double **u = new long double *[nx]; 
    for (int i=0;i<nx;i++) 
    u[i] = new long double [ny]; 
    int fun = 9; 
} 

Class A est amis avec Class B; Je dois utiliser le tableau que j'ai déclaré en Class A dans une fonction définie dans class B. Ci-dessous mon Classe B:

class B 
{ 
    public: 
    void get(A*); 
}; 

void B::get(A *pt) 
{ 
    using namespace std; 
    cout << pt->fun; 
    cout << pt->u[0][0]; 
} 

Je reçois une erreur de bus sur mon deuxième Cout pt->u[0][0]. Existe-t-il un moyen simple d'utiliser cette configuration, je dois accéder à mon tableau [] []? Je pense que j'obtiens l'erreur parce que le pointeur pointe vers la 1ère entrée de mon tableau, ainsi tout mon tableau 2D est sauvegardé en mémoire en une seule ligne (en pensant à haute voix ici). Je suis un gars Fortran donc ce truc est un peu nouveau pour moi.

Toute aide ou "pointeur" vers d'autres threads utiles serait apprécié.

Merci!

Alberto

+1

Avez-vous appelé 'make()' d'abord ... ? –

+1

Et puisque vous êtes public, le fait que la classe B soit un ami de A ne joue pas vraiment de rôle dans le problème (corrigez-moi si je me trompe) – AlexJF

+0

Oui, oui, j'ai une fonction qui appelle make() et get() .J'obtiens la bonne valeur "cout << pt-> fun;" lorsque je compile et exécute le code – Al007

Répondre

4

Je pense que vous obtenez l'erreur, car A::u n'est pas initialisé (dans la méthode A::make vous initialisez une variable locale u, non membre. Vous devez changer

void A::make() 
{ 
    long double **u = new long double *[nx]; // should be just u, or this->u. 
+0

Merci! cela a fait l'affaire – Al007

0

Il y a quelques problèmes avec votre code: nx et ny ne semble pas être définie nulle part, et vous ne make pas initialize A::fun du tout, vous plutôt définir une variable locale nommée fun qui sort de la portée immédiatement.

Quant à votre erreur, il semble comme l'erreur provient du fait que make() n'a pas été appelé pt. Assurez-vous que make() est appelée sur l'instance que vous passez à get, sinon le tableau u ne sera pas alloué.

+0

J'ai omis quelques détails, comme nx et ny. J'appelle make() dans mon int main() partie de mon code. Ici, je passe l'adresse de ma classe à la fonction get() (je pense correctement) puisque je peux compiler et obtenir la bonne valeur de "fun" à afficher sur mon écran. – Al007

Questions connexes