【发布时间】:2013-07-02 16:21:55
【问题描述】:
我有一个称为 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[] 声明。
【问题讨论】:
-
请贴出真实代码。
argv没有在上面的main中声明。 -
好吧,首先,
argv不存在。这就是我们知道这个测试用例是无稽之谈的方式。向我们展示您的真实代码;您一直在调试的代码;您尝试编译的代码。实际上包含错误的代码。 -
只是一个猜测,但您的真实代码中的
z可能被声明为字符串而不是字符串数组。发布您的真实代码,您将获得真正的解决方案。 -
(code simplified tremendously here)做得很好,但您确实应该在进行最终调试之前完成它,而且您绝对应该在发布之前对其进行测试!它使问题消失(并引入了一个新问题)。 -
你为什么没有
lineGraph graphData(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);?