Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58

    [C++] Modificatore Static

    Ciao a tutti. Scusate la questione niubba ma il c++ lo sto studiando adesso. Ecco io avrei questo codice:

    codice:
    #include <iostream>
    
    using namespace std;
    
    class CProva {
          private:
                  static float n;      
          public:
                 CProva() {
                          SetN(3.14);
                 }
                 static void SetN(const float &num) {
                        n = num;
                 }
                 static float GetN() {
                        return n;
                 }
                 static void ShowAbout() {
                        cout << "#CProva v1.0" << endl;
                 }
    };
    
    int main() {
        int a;
        CProva::ShowAbout();
        cout << "Pigreco: " << CProva::GetN() << endl;
        cin >> a;
        return 0;
    }
    Naturalmente l'ho fatto solo per provare ad usare il modificatore static. Il problema è che compilando il listato con il devcpp mi esce fuori l'errore seguente: [Linker error] undefined reference to `CProva::n' .

    Da quello che ho capito gli attributi static posso essere modificati solo da funzioni membro static, poi anche che se una funzione membro è dichiarata static è possibile usarla anche non instanziando nessun oggetto della classe stessa, attraverso il risolutore di scope ::, no?

    Allora dove sbaglio? Sapete illuminarmi ?

    grazie anticipatamente

  2. #2
    Con il comando static si dice al compilatore di dichiarare una variabile la prima volta he è eseguita. Quindi il linker non trova la variabile perché non è dichiarata!

    Aggiungi prima di main CProva::n;
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    Non funziona. Ho fatto come dici tu, ho messo
    codice:
    CProva::n;
    tra la fine della definizione della classe e la funziona main().

    Altri suggerimenti?

  4. #4
    float CProva::n;
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    lol si giusto, ora funziona. grazie, anche se non ho capito molto xkè. Il fatto è che mi sono riferito a questo: http://www.wmlscript.it/cpp/page9b.php e li si limita a fare come avevo fatto inizialmente io, xò a me non funziona >_> . Voi che ne dite è sbagliato nella guida?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    Sul libro guida al c++ di herbert shildt ho trovato scritto questo nel paragrafo che parla di static:

    "Quando si dichiarano i dati membri static all'interno di una classe, non si definiscono tali dati. Questo significa che non si sta allcoando spazio di memoria per tali dati (in C++, una dichiarazione descrive qualcosa e una definizione crea qualcosa), Si dovrà pertanto fornire una definizione globale per i dati membri static in un'altro punto, all'esterno della classe......."

    in pratica con static all'interno delle classi non si alloca memoria, poi dp l'esempio c'è un'altro paragrafo che spiega:

    "Per comodità, le prime versioni di C++ non richiedevano la seconda dichiarazione di una variabile membro static. Tuttavia questa comodità dava origine a gravi incongruenze e fu eliminata molti anni fa."

    Probabilmente quella guide segue un c++ superato...

    non vorrei imbattermi ancora in qualcosa del genere lol.

  7. #7
    Ho letto la guida e in un passo in mezzo al testo dice "L'inizializzazione di un attributo static va eseguita successivamente alla sua dichiarazione ed al di fuori della dichiarazione di classe". Ma a parer mio è una guida troppo contorta.
    Spero che impari presto il C++. Ciao!
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.