Экземпляр класса "по умолчанию" в качестве поля этого класса, C++
У меня есть класс сообщения, которое хранится в очереди сообщений для передачи их между потоками. Вот как он выглядит:
class Message
{
public:
Message()
: Message(0, std::string(), 0)
{
}
Message(std::time_t time, std::string body, int count = 4)
: timestamp(time), cmd(body), count(count)
{
}
std::string body()
{
return cmd;
}
int getCount()
{
return count;
}
void decrementCount()
{
--count;
}
public:
static Message DEFAULT = Message();
private:
std::string cmd;
std::time_t timestamp;
int count;
};
И мне надо иметь "сообщение по умолчанию" - пустое сообщение, которое я буду возвращать из очереди, когда в ней пусто:
Message& top(int timeout = 0)
{
std::unique_lock<std::mutex> lock(mutex);
static Message DEFAULT = Message();
if (timeout <= 0)
{
condition.wait(lock, [this] {
return !messages.empty();
});
}
else
{
auto timeoutOccured = !condition.wait_for(lock, std::chrono::milliseconds(timeout), [this] {
return !messages.empty();
});
if (timeoutOccured)
return Message::DEFAULT;
}
}
Проблема в том, что при таком объявлении поля DEFAULT в классе Message компилятор жалуется на incomplete тип. Как исправить эту ошибку и решить мою задачу?
Ответы (1 шт):
Автор решения: Никита
→ Ссылка
А зачем оно вам внутри класса? Вынесите его после класса в тот же namespace с inline, будет работать.