我对简单的c ++函数有疑问。 这是我的cpp文件:
#include <string>
#include <iostream>
#include <stdio.h>
#include <ros/ros.h>
#include <json_prolog/prolog.h>
using namespace std;
using namespace json_prolog;
int main(int argc, char *argv[])
{
ros::init(argc, argv, "Knives");
Prolog pl;
char M[]="drawer";
cout<<M<<endl;
if(strcmp(M,"knife")==0)
{
string q= "rdfs_individual_of(M, 'http://knowrob.org/kb/knowrob.owl#TableKnife')";
PrologQueryProxy bdgs = pl.query(q);
cout<< endl;
for(PrologQueryProxy::iterator it=bdgs.begin(); it != bdgs.end(); it++)
{
PrologBindings bdg = *it;
cout << "Knives individuals= "<< bdg["M"] << endl;
}
cout<< endl<< endl;
}
if(strcmp(M,"drawer")==0)
{
string q= "rdfs_individual_of(M, 'http://knowrob.org/kb/knowrob.owl#Drawer')";
PrologQueryProxy bdgs = pl.query(q);
cout<< endl;
for(PrologQueryProxy::iterator it=bdgs.begin(); it != bdgs.end(); it++)
{
PrologBindings bdg = *it;
cout << "Drawer individuals= "<< bdg["M"] << endl;
}
cout<< endl<< endl;
}
return 0;
}
此代码与xml文件连接以解析它。 如果我编译它工作,我没有问题。 现在我必须改变它,因为我不想定义变量char M但我想在输入中给它。问题是我改变了:
char M[]=....
使用:
char M;
cin>>M;
我有一个关于从char转换为const char [-fpermissive]
的问题我怎么能解决它?
答案 0 :(得分:4)
试试这个:
std::string M;
cin >> M;
替换这样的行:
if(strcmp(M,"drawer")==0)
用这个:
if (M == "drawer" )
答案 1 :(得分:2)
为什么将char
s(char M[] = ...;
)数组更改为单char
(char M;
)?除了建议使用std::string
(您应该这样做)的其他答案之外,如果您必须使用char
变量数组,则需要在{{1}中使用之前使用std::unique_ptr<char> M(new char[100])
(我假设100 std::cin
足以保存输入;必要时更改。
答案 2 :(得分:2)
std::string M = "drawer";
cout<<M<<endl;
if(M.compare("knife") == 0)
{
// do whatever
}
You can also do:
if(M == "knife")
{
// do whatever
}
除非你需要使用C字符串,为什么不使用标准库字符串?没有理由让生活变得更加艰难。