Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;解决指针和整数之间的比较问题_C++ - Fatal编程技术网

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