инициализация — Как инициализировать «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 со строковым литералом, кому я должен это делать?

2

Решение

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

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

void print(const char* prefix = "")
6

Другие решения

пытаться

unsigned char empty[] = { 0 };

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

"" дает массив 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),

4

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

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

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

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector