Я наследую исходные файлы C++ с большим количеством вызовов до x.append(p, len)
, где x имеет тип строки. Однако во многих случаях p имеет тип «unsigned char *», что вызвало множество ошибок на моем g ++ (версия 4.8.4). Если я вручную изменю p
на (char*)p
, он будет работать. Но таких случаев слишком много (бедных!).make C++ treat unsigned char * as char *
Чудо, если есть способ рассказать g ++, просто обработайте unsigned char*
как char *
.
Спасибо.
UPDATE 1
Следующий фрагмент кода выдаст ошибку при компиляции с командной строкой g++ -std=c++11 -fpermissive te1.cc
. Однако он фактически компилирует (отлично, но с предупреждением), когда тип переменной len
изменен с int
на size_t
. К сожалению, я не могу изменить тип параметра, интересно, есть ли способ сказать компилятору просто обработать второй параметр как size_t
при поиске версии метода append()
.
//content of te1.cc
#include <iostream>
typedef unsigned char uchar;
using namespace std;
string x = "hi ";
int main(int argc, char *argv[]) {
uchar *p = (uchar *)"tom";
int len = 3;
x.append(p, (size_t)len);
cout << x << endl;
return 0;
}
Возможно, переопределение 'unsigned' может помочь, но это действительно плохое решение. На всякий случай. –
Я попытался бы механически заменить 'unsigned char' на' char' в источниках. –
Замена 'unsigned char' на' char' может изменить семантику кода, например.когда есть несколько отливок: ' int main() { char a = (char) 0b11111111; неподписанный символ * c1 = (unsigned char *) & a; char * c2 = & a; int i1 = * c1; int i2 = * c2; cout << i1 << "" << i2 << endl; возвращение 0; } ' – Radek