Singleton + nonstatic成员 - 如何

时间:2014-06-02 16:54:47

标签: singleton member push-back

class Scheduler:public Kolejka
{
private:
unsigned long real_time;
Scheduler(void) :real_time(0L){}
Scheduler(const Scheduler &);
Scheduler& operator=(const Scheduler&);
~Scheduler() {}

public:
std::deque <Kolejka*> kolejka;
//...                            rest of methods, not important here
static Scheduler& getInstance()
{
    unsigned long tmptime = 1;
    for (int i = 0; i < 10; i++)
    {
        Kolejka* tmp = new Kolejka(tmptime + 1);
        kolejka.push_back(tmp); //error C2228: left of '.push_back' must
                                //have class/struct/union
                    //IntelliSense: a nonstatic member reference must be relative 
                   //to a specific object
        tmptime++;          
        delete tmp;
    }
    static Scheduler instance;
    return instance;
}
};

问题是用代码写的,我明白我应该用其他方式来做,但是怎么做?我要求一点帮助:) 我不知道如何摆脱这个问题,我试着没有指针,但问题是一样的。

编辑: 我这样解决了:

    void setscheduler()
    {
        unsigned long tmptime = 1;
        for (int i = 0; i < 10; i++)
        {
            Kolejka * tmp = new Kolejka(tmptime + 1);
            kolejka.push_back(tmp);
            tmptime++;
        }
    }
    static Scheduler& getInstance()
    {
        static Scheduler instance;
        return instance;
    }
    };

我只是制作了一个空的双端空格,稍后用

填充它
    Scheduler::getInstance().setscheduler();

1 个答案:

答案 0 :(得分:0)

您无法从静态方法访问类的“非静态”成员。 静态方法对您正在考虑使用的“对象”一无所知。

为了实现它,在getInstance()函数中创建一个Scheduler类型的局部变量并编辑该变量。然后回来。

同样在单身人士中,如果先前已经创建了实例,则必须返回现有实例,而不是每次都创建新实例。