2011-03-02 14 views
12

Tamam, biraz içgörü lazım.Visual 2010, "hata: İfadenin sınıf tipinde olması gerekir" yazıyor "

Bir C++ sınıfı alıyorum ve ikinci projemde çalışıyorum. E-postaları bir dize vektöründe saklamanıza olanak veren bir seçenekler listesi oluşturmaya çalışıyorum.

Şimdi bana yardım etmek ve kodlara bakmak için zaman ayırmadan önce sorunumu belirtmek istiyorum.

myHughesEmail.displayList(); 

Görsel 2010 tutar: Ben displayList() çalıştırmak için bu nesneyi kullanıldığında hemen bundan sonra

HughesEmail myhughesEmail(); 

Eh sorun gelir: Ben dosya "HughesProject2-1.cpp" bir nesneyi yapılan "error: Ifade, sınıf türünde olmalıdır" ifadesini kullanmalısınız "

Artık kitabı, bunu yapmak için bir başvuru olarak kullanıyorum ve bir nesneyi aynı şekilde oluşturup hemen sonra da aynı şekilde kullandım. Dosyamın nesneleri kullanmanın temellerini ve neler yapıldığını birbirinden oldukça farklı olduğu için yanlış olan şeyde kafam karıştı. Anladığım kadarıyla, bu eksik olan ve hala öğrenmeye devam ettiğim için, diğer hatalarım da var. Bunu yaptıktan sonra nesnenin kullanılmasının nedenini en çok neyin bildiğimi bilmem gerekiyor. Şimdiden teşekkürler.

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(); 

} 
:

Üç dosyaları var

+1

olası bir kopyası çoğaltılabilir [ile nesne yaratma arasındaki fark() veya olmadan] (http://stackoverflow.com/questions/5116541/difference-between-creating-object-with-ve-without) –

+2

@Charles: Ben don yazarın, sormak istediği zaman mevcut olan bilgisine dayanarak soruyu açık bir şekilde bulamamış olması gibi, bir dupe olarak kapanmanın gerekliliğini görüyoruz. – Puppy

+1

@DeadMG: Close! = Sil. Aynı ancak farklı şekilde ifade edilen soruları bir araya getirmek, sonraki araştırmacıların ilgili cevapları bulmasına yardımcı olur. –

cevap

39

En çok rahatsız edici ayrıştırma denen bir şeye rastladınız.

HughesEmail myHughesEmail(); 

Bu çizgi yığını yeni HughesEmail nesne oluşturmaz. Bunun yerine, bir HughesEmail döndüren ve hiçbir şey almayan bir işlevi bildirir. Boş parantezleri kaldırmalısınız.

+0

Çok teşekkür ederim! Kitabın aslında bir başlangıç ​​dizesini gönderdiği için boş olanlara ihtiyaç olduğunu düşündüm. Şimdi devam edebilirim. Tekrar teşekkürler, taş! (çok uzun zamandır bu problemin üstesinden geliyorum>. <) – CrazyGrunt

+0

Bu beni bir kereden fazla çıldırdı ... – Max

+0

Teşekkürler, bu bana yardım etti, ayrıca @CrazyGrunt bu cevabı kabul etti! – Jaanus