#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char* argv[])
{
string s = "all";
string t = "top";
for (int i=1; i<argc ; i++)
{
cout<< argv[i]<< endl;
if( argv[2] != s || t)
{
cout<<"INVALID MODE"<< endl;
return -1;
}
}
}
从'std :: __ 1 :: string'(aka'basic_string,allocator>')到'bool'的无效转换无效的操作数到二进制
表达式(“ bool”和“ std :: __ 1 :: string”(又称“ basic_string,分配器>”))
您好,我正在传递命令行参数,例如“ 1 all emptyfile”和“ 1 top emptyfile”,在这里我想测试第二个参数是否不是全部或顶部以打印出“ INVALID MODE”。我无法理解为什么我不能使用s || t。我得到了我上面发布的错误,是否仍然存在
感谢本网站,我得到了的帮助,但是我还有另一个问题,如果我以第二个参数为最高或全部,我希望它不要打印出“ INVALID MODE”。但是它似乎仍然是打印输出的“无效模式”,在这种情况下,所有参数都是第二个参数,但是当top是第二个参数时,似乎没有打印出来。
再次非常感谢,我遇到的另一件事是,当不传递任何参数时,如何打印出“ NO PHRASE LENGTH”?一个如何测试。
还要如何测试第一个参数是否为整数?因此,如果它不是整数且为负数,则打印出“无效短语长度”
答案 0 :(得分:4)
您的表达式<meta charset="utf-8">
被分组为argv[2] != s || t
,则(argv[2] != s) || t
的左手参数为||
类型,这是一个问题,因为对于bool
,没有||
的重载std::string
运算符。解释了神秘的编译器消息。
这里的解决方案是写
bool
相反。请注意,我已将argv[2] != s && argv[2] != t
切换为||
,否则条件检查始终为&&
,并且您的程序将始终输出true
!有些语言按照您的方式工作。 C ++没有。
答案 1 :(得分:1)
您必须像这样测试
if( (argv[2] != s) && (argv[2] != t))
某些脚本语言允许您像在问题中所做的那样进行比较。 PERL是一种这样的语言。