错误:必须具有类类型
Error: Must have class type
我需要创建一个联系人列表,但我的代码中不断收到此错误:表达式必须具有类类型。
代码如下:
#include<iostream>
#include<string>
using namespace std;
class PhoneApp {
public:
string FirstName;
string LastName;
string PhoneNumber;
string EmailID;
PhoneApp() {
FirstName = "";
LastName = "";
PhoneNumber = "";
EmailID = "";
}
void addContact(){
cout << "Enter your contact's first name: ";
cin >> FirstName;
cout << "Enter your contact's last name: ";
cin >> LastName;
cout << "Enter your contact's phone number: ";
cin >> PhoneNumber;
cout << "Enter your contact's email address: ";
cin >> EmailID;
}
void displayContact(){
cout << "Here's your contact details: " << endl;
cout << "FirstName: " << FirstName << endl;
cout << "LastName: " << LastName << endl;
cout << "PhoneNumber: " << PhoneNumber << endl;
cout << "EmailID: " << EmailID << endl;
}
};
int main(){
PhoneApp myPhoneApp[50];
int index = 0;
while(1){
cout << "Press 1 to add contacts" << endl;
cout << "Press 2 to search for a contact" << endl;
cout << "Anything else to quit" << endl;
int choice;
cin >> choice;
switch(choice){
case 1:{ myPhoneApp[index].addContact();
index++;
break;}
case 2: { cout << "Enter a first name to search for: " << endl;
string search = "";
cin >> search;
for (int i = 0; i < index; i++) {
if(myPhoneApp[50].FirstName[i].compare(index) == 0);
break;
}
}
default: exit(1);
}
}
system("pause");
return 0;
}
错误在
if(myPhoneApp[50].FirstName[i].compare(index) == 0
这里到底是什么问题,我该如何解决?
感谢您的帮助
代码中有多个错误,但您指向的错误如下所示:
-
myPhoneApp[50].FirstName
是一个string
- 字符串由字符组成。使用下标运算符访问字符串中的字符
[i]
- 字符是原始的。
- 可以使用类和结构上的点
.
访问成员,但不能访问基元 - 因为
myPhoneApp[50].FirstName[i]
是一个char
,并且因为char
是一个基元,所以在上面使用点是无效的。
cout << "Enter a first name to search for: " << endl;
string search = "";
cin >> search;
for (int i = 0; i < index; i++) {
if(myPhoneApp[i].FirstName.compare(search) == 0) {
//do stuff
break;
}
}
有几件事出了问题。
首先,您需要将整个FirstName
字符串与search
进行比较,而不是FirstName
的单个字符。
其次,你需要遍历myPhoneApp[]
中的联系人,而不仅仅是在index 50
中不断检查FirstName
字符串的不同字符,这甚至不一定是设置的。
第三,没有string.compare()
重载将单个int
作为论据。 您正在寻找的是比较两个字符串的方法,这就是我的答案将要做的。
第四,一个你还没有解决的问题...您在if
语句后有一个分号,因此无论if
语句的条件如何,都没有真正执行任何内容......无论如何,您都会在一次迭代后达到该break;
。
Dashblinkenlight的回答解释了为什么错误消息是这样的,我的告诉你如何修复你的程序。
这里有几件小事聚集在一起,给你带来一个问题。
if(myPhoneApp[50].FirstName[i].compare(index) == 0);
break;
首先:您在"if"行的末尾有一个杂散的分号
if();
意思是"做测试,然后忘记它。总是在下一行做事"。
其次,您只检查联系人列表的一个元素
myPhoneApp[50]
你的意思肯定不是
myPhoneApp[i]
接下来,myPhoneApp[50].Firstname
解析为 std::string 的单个实例,然后尝试为该名称中的字母编制索引,并将它们与索引中的条目数进行比较。
myPhoneApp[50].FirstName[i].compare(index)
你大概的意思是
if(myPhoneApp[i].FirstName == search)
break;
----编辑----
您已经为"myPhoneApp"的成员变量提供了大写名称,就像您的类名称一样。这会让你感到困惑,这意味着你不能命名你的成员变量来匹配它们的类型:
PhoneApp PhoneApp;
是一个编译错误。
一种常见的做法是通过添加前缀("m_"表示成员)或后缀(某些地方添加"_"来表示成员变量)来为成员变量提供不同的名称。
例如
class PhoneApp {
public:
string m_FirstName;
string m_LastName;
string m_PhoneNumber;
string m_EmailID;
PhoneApp() {
m_FirstName = "";
m_LastName = "";
m_PhoneNumber = "";
m_EmailID = "";
}
};
或"m_firstName"、"m_lastName"等。
- 类没有命名C++代码中的类型错误
- 不完整类型错误(E0409、E0070、E0515)
- 使用具有结构不完整类型错误的模板
- 不命名构造函数和析构函数上的类型错误
- 返回派生类型时出现协变类型错误
- 为什么此构造函数没有给出不完整的类型错误?
- 定义模板化结构的特征时出现不完整的类型错误
- 使用重载构造函数时出现不完整的类型错误
- 为什么我得到表达式必须有类类型错误?
- 输出 [left]=input[i] 行中的 c++ 代码中存在无效的类型错误
- 枚举成员不是类型错误
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 外部 "C" Visual Studio 2015 中的显式类型错误,DLL 测试代码
- 非默认析构函数会导致不完整的类型错误
- 为什么按引用传入会导致绑定引用类型错误
- Objective-C C++ 包装器 类型错误的不完整定义
- 输入类型错误
- 当构造函数的参数类型错误时引发异常
- 命名空间中的'bad_cast' 'std' 未命名类型错误
- C UNWORKOWN类型错误