Как инициализировать "unsigned char *" с аргументом по умолчанию в C++?

У меня есть класс с методом со следующей подписью:

void print(unsigned char *word);

Мне нужно установить "" в качестве значения по умолчанию для word, Как мне это сделать?

Я попробовал очевидное void print(unsigned char *word=""); но я получил следующую ошибку:

error: cannot initialize a parameter of type
  'unsigned char *' with an lvalue of type 'const char [1]'
    void print(unsigned char *word="");

Так как я не могу инициализировать word со строковым литералом, кто я должен это делать?

4 ответа

Решение

Вы говорите, что это "префиксный" аргумент, применяемый к печати.

Ответ в том, что вы должны сделать аргумент constпрекратите делать любые мутации, которые вы делаете с этим внутри функции, а затем используйте "" в качестве аргумента по умолчанию:

void print(const char* prefix = "")

Пытаться

unsigned char empty[] = { 0 };

void print(unsigned char* word = empty )
{
  ...
}

"" дает массив const charпосле чего вы хотите массив или указатель на NON-const unsigned charкак тип, так и cv-квалификация не подходят.

Обратите внимание также, что в C++ char != signed char а также char != unsigned char,

Возможно, вы имеете в виду void print(const char *word);, но, вероятно, вы хотите просто print(std::string const &) или же print(std::string),

 void print();
 void print(unsigned char* prefix);
 // in cpp file:
 void print(){
   unsigned char temp = 0;
   print(&temp);
 }

Это обеспечивает две перегрузки, одна с 0 и одна с одним аргументом.

У нулевого аргумента один есть некоторая автоматическая память, которую он предоставляет одному аргументу один. Обратите внимание, что только один байт под указателем действителен для чтения / записи: без длины, print не имеет никакого способа узнать что-либо другое.

Пока нет массива, ни один не нужен для одного элемента.

Другие вопросы по тегам