我正在尝试实现以下类(class)。但是,当我尝试在其定义内实例化该类的对象并将“0”作为值初始化该对象时,出现错误:
谁能解释我如何删除此错误?
class MessageType
{
public:
static const MessageType msgEvent(0);
private:
MessageType();
virtual ~MessageType();
MessageType(int);
};
最佳答案
您需要在cpp文件的类定义之外初始化(定义)它。
MessageType const MessageType::msgEvent;
但是,您这样做的意图不是很清楚。您是否要实现单例模式,可能此示例实现可能会有所帮助,尽管有其缺点,但我还是要由您自己决定是否真的需要单例:
//MessageType.h
#include <boost/noncopyable.hpp>
class MessageType: private boost::noncopyable
{
public:
static MessageType* instance();
private:
MessageType();
~MessageType();
static bool g_initialised;
// static initialisation
static MessageType g_instance;
// dynamic initialisation
};
// MessageType.cpp
#include "MessageType.hpp"
#include <ostream>
#include <iostream>
#include <cstring>
bool MessageType::g_initialised;
// static initialisation
MessageType MessageType::g_instance;
// dynamic initialisation
MessageType::MessageType()
{
g_initialised = true;
}
MessageType::~MessageType()
{
g_initialised = false;
}
MessageType* MessageType::instance()
{
return g_initialised ? &g_instance : 0;
}