我的问题是:
error_print(argv[0], "invalid option -- '" << (char)optopt << "'");
我知道我无法使用<<
,但我也无法使用+
。因为它给出错误:
error: invalid operands of types 'const char*' and 'const char [2]' to binary 'operator+'
如何将其作为字符串传递给我的error_print
函数?
看起来好像过度杀戮但是我用它20次,我只是让演示变得非常简单。
PS:我可以使用C ++ 11。
void error_print(string name, string error) {
cerr << name << ": " << error << endl << endl;
cerr << "Usage: " << name << " [-a -b]" << endl;
exit(1);
}
int main( int argc, char** argv)
{
bool a_flag = false;
bool b_flag = false;
opterr = 0;
int c;
while (1) {
struct option long_options[] =
{
{"alpha", no_argument, 0, 'a'},
{"beta", no_argument, 0, 'b'},
{0, 0, 0, 0}
};
e.
int option_index = 0;
c = getopt_long (argc, argv, "ab",long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 0:
break;
case 'a':
a_flag = true;
break;
case 'b':
b_flag = true;
break;
case '?':
error_print(argv[0], "invalid option -- '" << (char)optopt << "'");
break;
default:
error_print(argv[0], "");
break;
}
}
答案 0 :(得分:3)
您不能将+用于文字字符串和单个字符,但您可以将其用于std :: string,因此请使用
"invalid option -- '" + std::string(1, optopt) + "'"
答案 1 :(得分:2)
如果您的编译器足够新(草案C ++ 14):
"invalid option -- '"s + char(optopt) + "'"s
此功能可以添加到C ++ 11中,因为它具有语言支持,(在C ++ 14之前,标准库不提供s
文字)
std::string operator "" s(const char* str, std::size_t len)
{
return {str,len};
}