Chcę, aby moje obiekty Timer były tworzone tylko przez Timer :: create(). W tym celu uczyniłem konstruktora prywatnym. Dostaję jednak błąd kompilatora mówiąc, że "Timer :: Timer (unsigned int)" jest prywatny "w kontekście new_allocator.h. Jak mogę rozwiązać ten problem?vector :: emplace_back dla obiektów z prywatnym konstruktorem
class Timer {
private:
int timeLeft;
Timer(unsigned int ms) : timeLeft(ms) {}
public:
static std::vector<Timer> instances;
static void create(unsigned int ms) {
instances.emplace_back(ms);
}
};
std::vector<Timer> Timer::instances;
Oczywiście, to jedyny powód dlaczego 'push_back' będzie działać tak, ponieważ konstruktor kopia/ruch jest publiczna. Jeśli wszystkie konstruktory są prywatne, ani 'emplace_back' ani' push_back' nie będą działać. – hvd