-5

我有一个称为 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;

我很好奇一个解决方案,以及为什么它给我一个错误的解释(我将 string[] 的一个元素设置为一个字符串,我认为这是允许的)。我可能缺少一些基本的东西,因为我的 C++ 生锈了。

提前致谢!

编辑:问题已解决。是一个偷偷摸摸的变量声明覆盖了 z[] 声明。

4

2 回答 2

5

代码中有几个错误:

  1. ;类声明后丢失。
  2. argv没有声明,你应该写int main(int argc, char *argv[]).
  3. 类的构造函数是私有的(应该是公共的)。

但是在更正这些错误之后,代码编译得很好。没有任何cannot convert std::string to char错误。

可能您正在尝试编译不同的东西,而不是您向我们展示的代码。

于 2013-07-02T16:31:29.483 回答
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): error C2440: '=' : cannot convert from 'std::string' to 'char'
1> 没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符
1 >main.cpp(588): error C2440: '=' : cannot convert from 'std::string' to 'char'
1> 没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符
1>main.cpp(589): error C2440: '=' : cannot convert from 'std::string' to 'char'
1> 没有可以执行此转换的用户定义转换运算符,或者该运算符不能叫

仔细检查您的实际代码并确保z像这样贴花为数组

class lineGraph
{
    string z[3];

    // ...more REAL code...
};
于 2013-07-02T16:45:28.647 回答