Coś kręcisz kolego, drugi sposób nie ma prawa wyrzucić jakiegokolwiek błędu, tym bardziej błędu związanego z próbą przypisania wskaźnika const char*
na wskaźnik string*
, ponieważ tam czegoś takiego po prostu nie ma. Przyjrzyj się jeszcze raz, dokładnie:
nazwa[0] = new string( va_arg(ap, const char*) );
Mam nadzieję, że widzisz różnicę.
Problem w tym, że cały czas nie wiem, co Ty tam w argumentach funkcji (ze zmienną ilością parametrów) dajesz. Jeśli to są c-stringi, to to, co podałem wyżej, musi działać. Jeśli przekazujesz std::string
i przez wartość, czyli:
string s = "tekst";
foo(s);
wtedy do parametru dobierasz się tak:
string *nazwa[50];
...
nazwa[0] = &va_arg(ap, string);
Choć nie jestem pewnien, czy operowanie na takim stringu jest bezpieczne. Dlatego lepiej przekazać go przez wskaźnik:
foo(&s);
i
string *nazwa[50];
nazwa[0] = va_arg(ap, string*);
powinna działać.