我正在尝试实现以下类(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;
 }

10-06 10:38