Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [C++] variable or field declared void

    Ciao a tutti,

    ho un problema che non riesco a risolvere...

    Avevo una funzione, con questa intestazione:

    codice:
    virtual void translate(stringstream& ss, string class_name, bool convert = false, char dest_type = 0) = 0;
    Tutto filava liscio. Ora mi serviva aggiungergli un argomento, così l'ho modificata come segue (aggiunto l'argomento all'inizio):

    codice:
    virtual void translate(SyntaxTree* t, stringstream& ss, string class_name, bool convert = false, char dest_type = 0) = 0;
    Siccome questa intestazione, come si vede dal fatto che la funz è virtuale pura, è nella classe base di una gerarchia, anche nelle sottoclassi ho cambiato l'intestazione aggiungendo il primo argomento, e ovviamente ho cambiato tutte le volte che la funzione veniva richiamata.

    Morale: mi sbucano fuori un sacco di errori di questo tipo:
    In file included from [...]

    variable or field `translate' declared void
    `translate' declared as a `virtual' field
    expected `;' before '(' token
    Mi sapete dire qual'è il problema? Vi ringrazio..

    (sti errori strambi mi fanno ammattire..)

  2. #2
    ti posso suggerire come procederei io per scoprire l'errore.
    Torna alla versione che riesci a compilare.
    Invece di riscrivere la funzione con il nuovo parametro fai una nuova funzione in overload alla precedente e scrivi tutte le funzioni derivate sostituendole piano piano quelle vecchie con quelle nuove. Quando tutto ti funzioni cancelli le vecchie dichiarazioni.
    ciao
    sergio

  3. #3
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    ho provato, ma da quell'errore subito sull'intestazione della funz in overloading... Ora ho:

    codice:
    virtual void translate(stringstream& ss, string class_name, bool convert = false, char dest_type = 0) = 0;
    
    virtual void translate(SyntaxTree* t, stringstream& ss, string class_name, bool convert = false, char dest_type = 0);
    (la seconda non è virt pura perchè dato che ancora non l'avevo reimplementata sennò mi dava problemi)

    Solo aggiungendo l'intestazione da quell'errore..

  4. #4
    controlla meglio con pazienza a me questo lo compila correttamente
    codice:
    #include <iostream>
    
    using namespace std;
    class SyntaxTree {};
    
    class foo {
            virtual void translate(stringstream& ss, string class_name, bool convert = false, char dest_type = 0) = 0;
            virtual void translate(SyntaxTree* t, stringstream& ss, string class_name, bool convert = false, char dest_type = 0) = 0;
    public:
            foo () {}
             
    };          
    
    
    int main () {
    
      return 0;
    }

  5. #5
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    sto facendo delle prove,a boh... sembra sia que SyntaxTree che non gli piace, perchè se metto come hai fatto tu un classSyntaxTree2{}; prima di quella classe lì non da quell'errore...

    Però SyntaxTree.h è incluso in quel file, perchè non gli dovrebbe andare a genio??

    E poi puoi spiegarmi meglio che significa quell'errore? in quali casi viene dato insomma, così magari mi viene qualche idea... è proprio strambo..

  6. #6
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    alla fine il problema è che non riusciva a vedere SyntaxTree... si vede non lo vedeva come tipo e dava quell'errore (poco utile)..

    poichè con le inclusioni non risolvevo ho fatto una forward declaration di SyntaxTree ed ora è ok...

    grazie a mondobimbi dell'aiuto

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 © 2025 vBulletin Solutions, Inc. All rights reserved.