Вы пытаетесь вызвать конструктор для уже сконструированного объекта.
Эта строка завершается ошибкой:
api(apiUrl);
Вы пытаетесь вызвать вызов, потому что компилятор ищет один из этихfunctions:
return_type APIClient::operator()(const String&);
return_type APIClient::operator()(String);
return_type APIClient::operator()(String&);
Ваше утверждение должно быть объявлением, если вы хотите, чтобы ваш конструктор вызывался.
ApiClient api(apiUrl);
// or better in c++11:
APIClient api{ apiUrl };
В качестве альтернативы, вы можете создать инициализатор в ApiClient, который принимает одну строкув качестве параметра, что-то вроде этого:
class ApiClient
{
public:
ApiClient() { ...}
ApiClient(const String& s) { Initialize(s); }
Initialize(const String& s) { do the work }
...
};
Будьте внимательны при предоставлении API-интерфейсов инициализации в один или два шага в ваших классах.Вам потребуется правильная функция сброса, чтобы избежать путаницы при повторной инициализации новой строки.