我有一个名为shell脚本的可执行文件:
./lineGraph argv[1] argv[2] ... argv[9]
它创建了类lineGraph的一个实例(这里简化了代码):
class lineGraph
{
string z[3];
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;
}
}
public int main(int argc, char* argv[])
{
lineGraph *graphData = new lineGraph(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
};
我得到了:
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
下面:
this->z[0]=z1;
this->z[1]=z2;
this->z[2]=z3;
我对解决方案充满好奇,并解释了为什么它会给我一个错误(我将字符串[]的元素设置为字符串,我和#39 ; d认为是允许的)。
,因为我的C ++生锈了,这可能是我缺少的基础提前致谢!
编辑:问题已解决。是一个偷偷摸摸的变量声明覆盖z []声明。
答案 0 :(得分:5)
代码中有几个错误:
;
。argv
未声明,您应该写int main(int argc, char *argv[])
。但在纠正这些错误后,代码编译得很好。没有任何cannot convert std::string to char
错误。
可能你正在尝试编译不同的东西,而不是你向我们展示的代码。
答案 1 :(得分:0)
我能够重现您获得的错误的唯一方法是将z
更改为单个string
而不是字符串数组。下面的示例产生了与您相同的结果
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 GT;没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符 1> main.cpp(588):错误C2440:'=':无法从'std :: string'转换为'char'
1 GT;没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符 1> main.cpp(589):错误C2440:'=':无法从'std :: string'转换为'char'
1 GT;没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符
仔细检查您的实际代码并确保将z
标记为数组,如此
class lineGraph
{
string z[3];
// ...more REAL code...
};