в то время как все остальные здесь, кажется, вешали на (правильно) адресация синтаксис (задн []
) Я подозреваю, ваш вопрос вы В настоящее время я боролся с тем, как передать указатель-на-указатель-на-const-char. Исходный синтаксис, который вы указали, неверен, но при этом делается следующее:
char **names = new char *[numNames];
// populate names[]
MyMethod(names);
не решит вашу проблему. Вы получите сообщение об ошибке «no matching function call», потому что передаваемый вами параметр имеет определенный тип (указатель на указатель на символ), в то время как функция ожидает нетривиально-конвертируемого другого типа (указатель на указатель на сопзЬ-голец).
Простой факт: вы не можете сделать это от char **
. See this question/answers по причинам, но длинным и коротким, это типы, которые просто несовместимы. Если вы хотите сделать это без изменения этого прототипа вы собираетесь иметь, чтобы сделать что-то вроде этого:
int numNames = 5;
char **names = new char *[numNames];
// populate your names[], then...
const char **ro_names = new const char *[numNames];
std::copy(names, names+numNames, ro_names);
MyMethod(ro_names);
delete [] ro_names;
// clean up names[] elements, then...
delete [] names;
Hideous Я знаю. Вы можете значительно очистить его с помощью вектора (который вы должны использовать в любом случае, кстати), но я сохранил динамику дрожания, поскольку они были тем, с чего вы начали.
'char ** names = new char * [numNames];' –
Как насчет 'char * names [numNames];'? – Svalorzen
@Svalorzen C++ является VLA-дефицитным (расширения gcc не выдерживают) – WhozCraig