Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:无法转换‘;std::string’;至‘;char’;委派_C++_String_Char - Fatal编程技术网

C++ 错误:无法转换‘;std::string’;至‘;char’;委派

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

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