Tôi muốn đối tượng Hẹn giờ của mình được tạo thông qua Timer :: create(). Với mục đích này, tôi đã tạo ra hàm tạo riêng. Tuy nhiên, tôi nhận được một lỗi trình biên dịch nói rằng "Timer :: Timer (unsigned int)" là riêng tư "trong bối cảnh của new_allocator.h. Làm thế nào tôi có thể giải quyết vấn đề này?vectơ :: emplace_back cho các đối tượng có hàm tạo riêng
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;
Tất nhiên, lý do duy nhất tại sao 'push_back' sẽ làm việc là vì constructor sao chép/di chuyển là công khai. Nếu tất cả các hàm tạo là riêng tư, cả 'emplace_back' và' push_back' đều sẽ không hoạt động. – hvd