Как инициализировать "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
не имеет никакого способа узнать что-либо другое.
Пока нет массива, ни один не нужен для одного элемента.