C++ 错误:无法转换‘;std::string’;至‘;char’;委派
我有一个称为shell脚本的可执行文件:C++ 错误:无法转换‘;std::string’;至‘;char’;委派,c++,string,char,C++,String,Char,我有一个称为shell脚本的可执行文件: ./lineGraph argv[1] argv[2] ... argv[9] 它创建了类lineGraph的一个实例(这里的代码非常简化): 我得到: lineGraph.cc:251: error: cannot convert ‘std::string’ to ‘char’ in assignment lineGraph.cc:252: error: cannot convert ‘std::string’ to ‘char’ in assign
./lineGraph argv[1] argv[2] ... argv[9]
它创建了类lineGraph的一个实例(这里的代码非常简化):
我得到:
lineGraph.cc:251: error: cannot convert ‘std::string’ to ‘char’ in assignment
lineGraph.cc:252: error: cannot convert ‘std::string’ to ‘char’ in assignment
lineGraph.cc:253: error: cannot convert ‘std::string’ to ‘char’ in assignment
在这里:
我很好奇一个解决方案,也很好奇为什么它会给我一个错误(我正在将字符串[]的元素设置为字符串,我认为这是允许的)。也许我缺少了一些基本的东西,因为我的C++是生锈的。
提前谢谢
编辑:问题已解决。是一个偷偷摸摸的变量声明覆盖了z[]声明。代码中有几个错误:
类声明之后的代码>
argv
未声明,应编写intmain(intargc,char*argv[])
无法将std::string转换为char
错误
可能您正在尝试编译一些不同的东西,而不是您向我们展示的代码。我能够重现您遇到的错误的唯一方法是将
z
更改为单个字符串,而不是字符串数组。下面的示例生成的结果与您得到的结果相同
class lineGraph
{
string z;
public:
lineGraph(string lumi, string label, char * /*typeArg*/, string volume, string axisStyle, string theLine, string z1, string z2, string z3)
{
this->z[0]=z1;
this->z[1]=z2;
this->z[2]=z3;
}
};
这将在VS2010上产生以下结果。根据所使用的工具链,错误代码可能略有不同
main.cpp(587):错误C2440:“=”:无法从“std::string”转换为“char”
1> 没有可执行此转换的用户定义的转换运算符,或者无法调用该运算符
1> main.cpp(588):错误C2440:“=”:无法从“std::string”转换为“char”
1> 没有可执行此转换的用户定义的转换运算符,或者无法调用该运算符
1> main.cpp(589):错误C2440:“=”:无法从“std::string”转换为“char”
1> 没有可执行此转换的用户定义的转换运算符,或者无法调用该运算符
仔细检查您的实际代码,确保将z
标记为如下所示的数组
class lineGraph
{
string z[3];
// ...more REAL code...
};
请张贴真实代码<上面的main
中没有声明code>argv
。首先,argv
不存在。这就是为什么我们知道这个测试用例是胡说八道。向我们展示你的真实代码;正在调试的代码;您一直试图编译的代码。。实际包含错误的代码。只是一个猜测,但在实际代码中它看起来像z
,可能被声明为字符串而不是字符串数组。发布您真正的代码,您将得到一个真正的解决方案。(这里的代码非常简化)
做得很好,但您真的应该在进行最终调试之前完成它,并且您肯定应该在发布之前测试它!它消除了这个问题(并引入了一个新的问题)。为什么不使用linegraphgraphdata(argv[1]、argv[2]、argv[3]、argv[4]、argv[5]、argv[6]、argv[7]、argv[8]、argv[9])代码>?这解决了问题:我有一个鬼鬼祟祟的“字符串z”隐藏在某处,覆盖了“字符串z[]”。
class lineGraph
{
string z;
public:
lineGraph(string lumi, string label, char * /*typeArg*/, string volume, string axisStyle, string theLine, string z1, string z2, string z3)
{
this->z[0]=z1;
this->z[1]=z2;
this->z[2]=z3;
}
};
class lineGraph
{
string z[3];
// ...more REAL code...
};