Неверное преобразование C ++ - PullRequest
1 голос
/ 29 мая 2011

Следующий код выдает ошибку компиляции, invalid conversion from 'const char*' to 'char*'ptrInputFileName, и ptrFileName оба объявлены как const char*.Любые предложения о том, как получить это для компиляции?Спасибо.

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

Ответы [ 3 ]

4 голосов
/ 29 мая 2011

Очевидно, что вы не можете скопировать во что-то, на что указывает const * - удалите const, и если это вызывает проблемы с вызовом конструктора, вы делаете что-то семантически недопустимое.

Кроме того, использование псевдо-венгерского языка затрудняет чтение кода. Потеряйте префиксы ptr и сделайте имена короче.

4 голосов
/ 29 мая 2011

strcpy принимает адресата как неконстантный указатель char*, а ptrFileName равен const char*. Неявное преобразование невозможно, и я бы не рекомендовал явное преобразование. Просто сделайте ptrFileName неконстантным.

3 голосов
/ 29 мая 2011

Использовать 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;
};
...