errore: due o più tipi di dati in dichiarazione di main?

Molto nuovo per la codifica, quindi, si prega di comprensione 😉

Praticamente sto cercando di fare un calcolatore con le while loop, e if dichiarazioni.

#include <iostream>

using namespace std;

int x = 1;
int number;
int total = 0;
int amt = 1;
int a;
int b;
int c;
int d;
string ans;

class OperateClass

Ricevo l’errore: due o più tipi di dati in dichiarazione di ‘principale’

Si prega di spiegare cosa significa questo/come risolvere il problema.

Anch’io mi chiedevo se ho bisogno di fare un nuovo oggetto per ogni funzione (Aggiungere, sottrarre, moltiplicare e dividere)

Aiuto vi prego!!

int main()
{

    cout << "Do you want to add, subtract, multiply or divide? I want to : " << endl;
    cin >> ans;

    if(ans == "add"){
        OperateClass opOper;
        opOper.add();

    }else{

        if(ans == "subtract"){
            OperateClass opOper
            opOper.subtract();
                }

    }else{

        if(ans == "multiply"){
            OperateClass opOper
            opOper.multiply();
        }

    }else{

        if(ans == "divide"){
            OperateClass opOper
            opOper.divide();

        }
    }

}

class OperateClass{
    public:
        int add(){
            while(x <= 3){
                cout << "Enter a number to use to add: " << endl;
                cin >> a;
                total = total + a;
                x++;
                amt++;
            }
        }

        int subtract(){
            while(x <= 3){
                cout << "Enter a number to use to add: " << endl;
                cin >> b;
                total = total - b;
                x++;
                amt++;
            }
        }

        int multiply(){
            while(x <= 3){
                cout << "Enter a number to use to add: " << endl;
                cin >> c;
                total = total * c;
                x++;
                amt++;
            }
        }

        int divide(){
            while(x <= 3){
                cout << "Enter a number to use to add: " << endl;
                cin >> d;
                total = total / d;
                x++;
                amt++;
            }
        }
}

int print(){
    cout << "Your total is: " << total << endl;

    return 0;
}
  • si dovrebbe usare if-else if-else o switch. quello che stai facendo adesso è confusa. difficile trovare di aprire e chiudere la parentesi graffa.
  • Tali variabili globali in tutto il luogo sono davvero una buona idea.
  • In “if(risp == “sottrarre”/”moltiplicare”/”dividere”)” si dimentica “;” dopo “Operare Classe opOper”
  • Bene, io non sono più raggiungere il punto e virgola errori
  • Ora mi sto errore: aggregato ‘OperateClass opOper’ ha tipo incompleto e non può essere definito. Come potrebbe essere corretto?
  • Basta uccidere il class OperateClass; e spostare tutta la classe c’è, invece.
  • Il solito modo di scrivere un if / else if / sequenza è quello di trattare il “else if”, come se si trattasse di una sola parola. Io non riesco a formattarlo correttamente in un commento, ma questo gist mostra il modo più tradizionale per fare questo. (Alcune lingue hanno anche elsif o elseif come parola chiave; C++ non.)
  • Un interruttore può lavorare bene anche qui.
  • Ok ho spostato la definizione della Classe prima del main. Il programma viene eseguito ora!
  • Ora im chiedendo come ottenere cout << "Your total is: " << total; per eseguire

InformationsquelleAutor Bucky763 | 2012-07-17



3 Replies
  1. 4

    Nessuna parte di codice è valido. Si inizia una definizione di classe con class OperateClass, ma mai fine e correre a destra in main. Un (semplificato) definizione di classe prende la forma di:

    class [name] {
    
    };  //semi-colon terminates definition
    
    //so...
    
    class OperateClass {
    
    };  

    A quel punto, si dichiara main… ma conduce a un else ramo (?).

    int main()
    {
    
        cout << "Do you want to add, subtract, multiply or divide? I want to : " << endl;
        cin >> ans;
    
        if(ans == "add"){
        OperateClass opOper;
        opOper.add();
    
    }else{  //what is this?

    Funzioni deve terminare anche attraverso la loro parentesi graffa di chiusura, cioè,

    int main() {
    
    }  //function is over!

    Ora sembra che chi potrebbe essere solo un copia/incolla di errori. Se questo è il caso, allora probabilmente hai solo dimenticato il punto e virgola alla fine della definizione della classe.

    • C’è un nascosto if. C’è, però.
    • Sì è per questo che ho aggiunto che la scorsa po ‘ su. Penso che manca un punto e virgola è probabilmente il problema e questo è stato solo un brutto copia/incolla di lavoro.
    • E va bene. Sto andando a modificare il codice originale e aggiungere il punto e virgola.
    • Si prega di non farlo. Con il codice corretto, la domanda non ha più senso. Io rollback modifica per voi.
    • Io la penso così, è stato deciso che il problema è stato il punto e virgola, che sono qui tra le altre cose. Vota per te.
  2. 1

    Si consideri il seguente programma:

    class C
    
    int main() {
    
    }
    
    class C {
    
    }
    
    void someFunc(){}

    Questo è fondamentalmente il tuo programma bollito giù per i beni di prima necessità. Ecco gli errori:

    errore: due o più tipi di dati in dichiarazione di 'principale' 
    errore: previsto ';' dopo la definizione della classe 
    

    Ecco il codice corretto:

    class C; //<--semicolon in forward declaration
    
    int main() {
    
    }
    
    class C {
    
    }; //<--semicolon after class definition
    
    void someFunc(){}
    • Ora sto ottenendo il errore: aggregato ‘OperateClass opOper’ ha tipo incompleto e non può essere definito
    • Basta uccidere la classe OperateClass; e spostare tutta la classe c’è, invece.
    • Spostando la classe in def prima principale, il programma per eseguire!
    • L’unica cosa è, è solito eseguire questa funzione ho aggiunto void print(){ cout << "Your total is: " << total << endl; }
    • Una nuova domanda completamente è più adatto per le ulteriori problemi, ma come un casuale indovinare, hai mai chiamata?
    • Ill fare una nuova domanda. Grazie. E puoi dare un esempio di chiamata?
    • Da qualche parte dove il codice viene eseguito: print();.
    • Penso che ho dimenticato. L’aggiunta al principale dovrebbe andare bene?
    • Ovunque si desidera che la stampa si verifica.
    • Va bene l’uomo, grazie mille!

  3. 1

    Permette di fare una leggera modifica del codice in modo che la sintassi è giusta.

    int main()
    {
    
        cout << "Do you want to add, subtract, multiply or divide? I want to : " << endl;
        cin >> ans;
    
        if(ans == "add"){
        OperateClass opOper;
        opOper.add();
            }
    
    else if (ans == "subtract"){
        OperateClass opOper;
        opOper.subtract();
            }
    
    else if (ans == "multiply"){
        OperateClass opOper;
        opOper.multiply();
            }
    
    else if(ans == "divide"){
        OperateClass opOper;
        opOper.divide();
    
            }
    else {} 
    
    } //end of main

    Classe di dichiarazione di variabile istruzione “OperateClass opOper”, inoltre, si ripete in ogni caso, si potrebbe anche solo scrivere l’istruzione al di fuori del tuo if-else condizioni per evitare ripetizioni, poiché tale affermazione è vera a prescindere da qualsiasi caso.

    • Grazie, cambiato il codice per che.

Lascia un commento