Copia di valori di una struct da un oggetto all'altro

di il
5 risposte

Copia di valori di una struct da un oggetto all'altro

Buongiorno a tutti,
se volessi copiare un valore INT da un oggetto ad un altro, è possibile mediante il seguente codice:

#include <stdio.h>

class Classe1{
        private: int a = 5;

        public: int get(){
                return(a);
                }
        };

class Classe2{
        public: Classe2(int b){
                printf("%d\n",b);
                }
        };

int main(){
        Classe1 c1;
        Classe2 c2(c1.get());
        return(0);
        }
Con questo codice si istanzia una classe con un valore INT di 5, di seguito si istanzia un secondo oggetto, prendendo come valore INT, il valore INT del primo oggetto.

La mia domanda è la seguente:
Se invece volessi copiare i valori di una STRUCT?
Ovvero, prendere i valori della STRUCT del primo oggetto e passarlo al secondo oggetto?
Ho scritto il seguente sorgente, basandomi sul primo, ma il compilatore mi restituisce errore.

#include <stdio.h>

class Classe1{
        private: struct struct1{
                        int a;
                        int b;
                         };

        private: struct struct1 s;

        public: Classe1(){
                        printf("Istanziato\n");
                        s.a = 5;
                        s.b = 10;
                        }

        public: struct struct1 get(){
                        return(s);
                        }
        };

class Classe2{
        private: struct struct1{
                        int a;
                        int b;
                         };

        private: struct struct1 s1;

        public: Classe2(struct struct1 s2){
                s1 = s2;
                printf("%d\n", s1.a);
                printf("%d\n", s1.b);
                }
        };

int main(){
        Classe1 c1;
        c1.get();
        Classe2 c2(c1.get());
        return(0);
        }
L'errore restituito dal compilatore è il seguente:

error: no matching function for call to ‘Classe2::Classe2(Classe1::struct1)’
   40 |  Classe2 c2(c1.get());
Dove sbaglio?
Grazie a tutti.

5 Risposte

  • Re: Copia di valori di una struct da un oggetto all'altro

    Classe2 non vede la struct dichiarata in Classe1. Anche se hanno lo stesso nome, sono visti come due tipi diversi.
    Puoi dichiarare la struct fuori dalle due classi, oppure dichiarla come public.
    in tal caso va usata così al di fuori di Classe1
    
    Classe1::struct1
    
    La puoi rinominare per semplicità al di fuori di Classe1:
    
    using mystruct = Classe1::struct1;
    
    PS: l'inclusione di stdio.h in C++ andrebbe fatta così:
    #include<cstdio>
  • Re: Copia di valori di una struct da un oggetto all'altro

    Alexv ha scritto:


    Puoi dichiarare la struct fuori dalle due classi, oppure dichiarla come public.
    Provato,
    sia se la dichiaro come PUBLIC sia che la dichiaro fuori dalle due classi, il compilatore mi da sempre lo stesso errore.
  • Re: Copia di valori di una struct da un oggetto all'altro

    
    class Classe2{
    
            private: Classe1::struct1 s1;
    
            public: Classe2(Classe1::struct1 s2){
                    s1 = s2;
                    printf("%d\n", s1.a);
                    printf("%d\n", s1.b);
                    }
            };
    
  • Re: Copia di valori di una struct da un oggetto all'altro

    Funziona!
    Grazie

    Però devo dichiarare PUBLIC la STRUCT
    
    public: struct struct1{
                    int a;
                    int b;
                     };
    
    Mentre nel primo esempio che ho postato, si poteva copiare un valore di una PRIVATE: INT, come mai?

    Alexv ha scritto:


    
    public: Classe2(Classe1::struct1 s2){
    
    Il significato? si aspetta la STRUCT della classe Classe1 ?

    Alexv ha scritto:


    
    class Classe2{
            private: Classe1::struct1 s1;
    
    E qui? si crea una STRUCT della classe Classe1?

    Spero di aver interpretato bene il codice.

    Grazie ancora tante.
    Ciao.
  • Re: Copia di valori di una struct da un oggetto all'altro

    Sì e Sì
Devi accedere o registrarti per scrivere nel forum
5 risposte