C ++无效转换

时间:2011-05-29 18:39:51

标签: c++ g++ compiler-errors

以下代码产生编译错误invalid conversion from 'const char*' to 'char*'ptrInputFileNameptrFileName都声明为const char*。关于如何编译的任何建议?谢谢。

TextInputBuffer::TextInputBuffer(const char *ptrInputFileName)
    : ptrFileName(new char[strlen(ptrInputFileName) + 1])
{
    //--Copy the file name.
    std::strcpy(ptrFileName, ptrInputFileName);

3 个答案:

答案 0 :(得分:4)

strcpy将目标作为非常量指针char*ptrFileNameconst char*。不可能进行隐式转换,我不建议进行显式转换。只需使ptrFileName非const。

答案 1 :(得分:4)

显然,你不能复制到const *指向的东西 - 删除const,如果这导致调用构造函数的问题,你在做一些语义上无效的事情。

此外,您使用伪匈牙利语会使代码难以阅读。丢失ptr前缀,并缩短名称。

答案 2 :(得分:3)

使用std :: string。

struct TextInputBuffer {
  TextInputBuffer(const char *filename)
  : _filename(filename)
  {}

  // Explicit delete not even required as it would have been
  // when you used new.

private:
  std::string _filename;
};