C++ c++;解决指针和整数之间的比较问题
给我这个错误:C++ c++;解决指针和整数之间的比较问题,c++,C++,给我这个错误: ISO-C++禁止指针与整数[fPrime] 的比较 我试图循环文本文件中的行,如果行不是以“=”等于字符开头,则单击“push_pack”。否则我想打破这个循环 非常感谢您的帮助 do { getline (myfile,temp); if (temp[0] != "="){ MyAlbums[i].tracks.push_back(temp); } else { break; } }while(tru
ISO-C++禁止指针与整数[fPrime]
的比较 我试图循环文本文件中的行,如果行不是以“=”等于字符开头,则单击“push_pack”。否则我想打破这个循环 非常感谢您的帮助do {
getline (myfile,temp);
if (temp[0] != "="){
MyAlbums[i].tracks.push_back(temp);
}
else {
break;
}
}while(true);
应该是
if (temp[0] != "="){
原因是temp[0]
属于char
类型(假设temp
是您读入的字符串),您应该将其与char literal'='
而不是string literal“=”
进行比较。我假设您成功读取了temp
,因此如果不是这样,您可能需要检查一下
编辑(感谢Adam Liss)
像“=”
这样的字符串文本是(常量字符*
)类型,它们用双引号括起来;单个字符用单引号括起来。因此,您有一条关于比较char
(char literal是整数)和const char*
的消息
从这里引述:
首先,确保
getline
成功。在bool
ean上下文中对其进行评估,得出以下结论:
C A character literal has type int.
C++ A character literal that contains only one character has type char,
which is an integral type.
而不是
while (getline(myfile, temp)) {
/* code goes here */
}
永远不要在输入时不检查它是否立即失败,否则你会发现非常讨厌的bug
其次,确保temp
长度至少为1个字符<如果可以安全地执行temp.size()>=1
操作,则该值将为true
。如果getline
曾给您一个长度为0的字符串,对其执行temp[0]
将导致未定义的行为。未定义的行为确实令人讨厌,因为它可以在一种情况下表现得完全无害,然后在一个意想不到的地方咬你
第三,做temp[0]!='='代码>而不是temp[0]!=“=”
'='
是一个字符,'='
是一个由两个字符组成的缓冲区,第一个是'='
第二个是'\0'
。当您尝试执行时,由“=”
表示的两个字符组成的数组将隐式转换为指向第一个字符的指针=代码>,然后生成错误(因为它不知道如何将指向字符的指针与字符进行比较)。澄清(tacp继续编辑其答案):字符串(指向字符的指针)用双引号括起来;单个字符用单引号括起来。因此,出现了一条关于指针的错误消息。感谢您提供了一个简洁、直截了当的答案。这是非常重要的helpful@tacp“=”
是由两个字符组成的数组(一个常量字符[2]
),而不是指针。然而,这样的数组一下子就变成了指向它们的第一个元素的指针,这就是OP得到指针错误的原因;查看汇编代码,您将找到包含“=”字符的内存地址。这就解释了错误消息。
while (getline(myfile, temp)) {
/* code goes here */
}
do {
getline(myfile, temp);
/* code goes here */
} while (true);