2011-03-02 39 views
12

Va bene ho bisogno di qualche intuizione.Visual 2010 continua a dirmi "errore: espressione deve avere tipo di classe"

Sto prendendo una classe C++ e sto lavorando al mio secondo progetto. Sto cercando di creare un elenco di opzioni che ti consentano di memorizzare le e-mail in un vettore stringa.

Ora prima di prendere il tempo per aiutarmi e guardare il codice, voglio sottolineare il mio problema. Ho fatto un oggetto nel file "HughesProject2-1.cpp":

HughesEmail myhughesEmail(); 

Bene il problema viene subito dopo questo quando ho usato questo oggetto per eseguire DisplayList():

myHughesEmail.displayList(); 

visiva 2010 mantiene dicendomi "errore: espressione deve avere tipo di classe"

Ora sto usando il libro come riferimento per fare questo e hanno creato un oggetto allo stesso modo e lo hanno usato allo stesso modo subito dopo. Sono confuso da ciò che ho sbagliato perché il mio file è piuttosto diverso rispetto alle basi dell'utilizzo degli oggetti e di ciò che viene fatto. Capisco che ci sono altri errori perché questo è incompleto e sto ancora imparando, ho bisogno di sapere che cosa è più probabile che mi causi dall'utilizzare l'oggetto dopo averlo fatto. Grazie in anticipo.

Ho tre file:

HughesEmail.cpp

// Classes for HughesProject2-1.cpp and HughesEmail.h 

// Includes 
#include <string> 
#include <iostream> 
#include <vector> 
#include <iomanip> 
#include "HughesEmail.h" 

// Namespaces 
using namespace std; 

// Initializing Constructor 
HughesEmail::HughesEmail() 
{ 
    vector<string> emailStorage(100); 
    emailMinimumLength = 9; 
    exitOption = 1; 
    emailOption = 1; 
} 

void HughesEmail::displayList() 
{ 
    // Check if exit is set, if not run. 
    if (exitOption == 1) 
    { 
    // Email list options 
    cout << "Choose from the list of options: \n" 
     "1 - Store an email address.\n" 
     "2 - Search an email address.\n" 
     "3 - List all email adresses.\n" 
     "4 - Delete an email address.\n" 
     "0 - Exit.\n" << endl; 

    while (emailOption != 0) 
    { 
     // Get user input for email list option 
     cout << "Option? : "; 
     cin >> option; 

     switch (option) 
     { 
     case '0': 
      // set exitOption to 0 
      exitOption = 0; 
      emailOption = 0; 
      break; 
     case '1': 
      //Input email name 
      cout << "Please input email to be stored: " << endl; 
      cin >> emailName; 
      // run storeEmail 
      storeEmail(emailName); 
      break; 
     case '2': 
      // run searchEmail 

      break; 
     case '3': 
      // run listEmail 

      break; 
     case '4': 
      // run deleteEmail 

      break; 

     //Ignore 
     case '\n': 
     case '\t': 
     case ' ': 
      break; 

     default: 
      cout << "\nPlease choose a valid option." << endl; 
      break; 
     } // end switch 

    } // end while 

    } else { 

     exitOption = 0; 

    } // end else 
} 


void HughesEmail::storeEmail(string emailName) 
{ 
    // Initialize counter 
    int i; 
    i = 0; 

    // Check if input emailName meets emailMinimumLength 
    if(emailName.length() >= emailMinimumLength) 
    { 

     // if email in vector slot i is less than minimum length, then override with new email. 
     if (emailStorage[ i ].length() < emailMinimumLength) 
     { 
      emailStorage[ i ] = emailName; 
     } else { 
      i++; 
     } // end else 

    } else { 
     cout << "Email does not meet the minimum length of: " << emailMinimumLength << " characters." << endl; 
    } // end else 
} 

HughesEmail.h

// In this project: HughesProject2.h 
    // Class header file. 

    //Includes 
    #include <string> 
    #include <iostream> 
    #include <vector> 

    //Namespaces 
    using namespace std; 

    class HughesEmail 
    { 
    public: 
     HughesEmail(); 
     void displayList(); 
     void storeEmail(string); 
     string searchEmail(string); 
     string listEmail(); 
     void deleteEmail(); 
    private: 
     vector<string> emailStorage; 
     int emailMinimumLength; 
     int emailOption; 
     int exitOption; 
     char option; 
     string emailName; 
    }; 

HughesProject2-1.cpp

// In this project: HughesProject2-1.cpp 
// Class creation to store email adresses. Adding, deleting, searching and listing email addresses. 

// Includes 
#include <string> 
#include <iostream> 
#include <vector> 
#include "HughesEmail.h" 

// Namespaces 
using namespace std; 

int main() 
{ 
    //Create HughesEmail Object 
    HughesEmail myHughesEmail(); 
    myHughesEmail.displayList(); 

} 
+1

possibile duplicato del [differenza tra la creazione oggetto con() o senza] (http://stackoverflow.com/questions/5116541/difference-between-creating-object-with-or-without) –

+2

@Charles: I don Non vedo la necessità di chiuderlo come un imbroglione, in quanto l'autore chiaramente non può aver trovato quella domanda data la sua conoscenza esistente al momento della richiesta. – Puppy

+1

@DeadMG: Close! = Elimina. Il collegamento di domande identiche ma di parole diverse aiuta gli utenti successivi a trovare risposte correlate. –

risposta

39

Ti sei imbattuto in qualcosa chiamato l'analisi più irritante.

HughesEmail myHughesEmail(); 

Questa linea non costruisce una nuova HughesEmail oggetto in pila. Piuttosto, dichiara una funzione che restituisce un HughesEmail e non prende nulla. Dovresti rimuovere le parentesi vuote.

+0

Grazie mille! Pensavo che fossero necessari quelli vuoti a prescindere dal momento che il libro invia effettivamente una stringa iniziale nella loro. Ora posso continuare. Grazie ancora, rock! (ho affrontato questo problema troppo a lungo ora>. <) – CrazyGrunt

+0

Questo mi ha fatto impazzire più di una volta ... – Max

+0

Grazie, questo mi ha aiutato, anche @CrazyGrunt accetta questa risposta !! – Jaanus

Problemi correlati