错误:无法在赋值时将'std :: string'转换为'char'

时间:2013-07-02 16:21:56

标签: c++ string char

我有一个名为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 []声明。

2 个答案:

答案 0 :(得分:5)

代码中有几个错误:

  1. 在课堂声明后遗失;
  2. argv未声明,您应该写int main(int argc, char *argv[])
  3. 该类的构造函数是私有的(应该是公共的)。
  4. 但在纠正这些错误后,代码编译得很好。没有任何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...
};