gpt4 book ai didi

c++ - Visual 2010 不断告诉我 "error: Expression must have class type"

转载 作者:IT老高 更新时间:2023-10-28 23:03:56 26 4
gpt4 key购买 nike

好的,我需要一些见解。

我正在学习 C++ 类(class),并且正在从事我的第二个项目。我正在尝试创建一个选项列表,允许您将电子邮件存储在字符串 vector 中。

现在在花时间帮助我并查看代码之前,我想指出我的问题。我在“HughesProject2-1.cpp”文件中创建了一个对象:

HughesEmail myhughesEmail();

当我使用这个对象运行 displayList() 时,问题就出现了:

myHughesEmail.displayList();

Visual 2010 一直告诉我“错误:表达式必须具有类类型”

现在我将这本书用作这样做的引用,他们以相同的方式创建了一个对象,然后以同样的方式使用它。我对自己的错误感到困惑,因为我的文件与使用对象的基础知识和正在做的事情完全不同。我知道我还有其他错误,因为这是不完整的,我仍在学习,我需要知道在我制作该对象后最有可能导致我使用该对象的原因。提前致谢。

我有三个文件:

休斯电子邮件.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();

}

最佳答案

你遇到了一种叫做最麻烦的解析。

HughesEmail myHughesEmail();

此行不会在堆栈上构造新的 HughesEmail 对象。相反,它声明了一个函数,该函数返回一个 HughesEmail 并且不接受任何内容。您应该删除空括号。

关于c++ - Visual 2010 不断告诉我 "error: Expression must have class type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com