Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: romank от Май 14, 2010, 14:39



Название: error LNK2005 MSVC2010
Отправлено: romank от Май 14, 2010, 14:39
Привет всем, не могу разобраться:
Создаю Singleton

SharedData.h
Код:
#ifndef SHAREDDATA_H
#define SHAREDDATA_H
#include <stdio.h>

// Pattern Singleton

class SharedData
{
public:
    static SharedData* Instance();
    void FreeInst();
private:
    static SharedData* self;
    static int refcount;
    SharedData();
    ~SharedData();
};
SharedData* SharedData::self = NULL;
int SharedData::refcount = NULL;

#endif // SHAREDDATA_H

SharedData.cpp

Код:
#include "SharedData.h"

SharedData::SharedData()
{

}

SharedData::~SharedData()
{

}

SharedData* SharedData::Instance()
{
        if (!self) self = new SharedData();
        refcount++;
        return self;
}

void SharedData::FreeInst()
{
    refcount--;
    if (!refcount)
    {
        delete this;
        self = NULL;
    }
}

Далее вызываю

Код:
#include "TempestLoader.h"
#include "..\SharedData\SharedData.h"
void TempestLoader::openFile(QString filename)
{
    SharedData* sdata = SharedData::Instance();
}

Ошибка
TempestLoader.obj : error LNK2005: "private: static class SharedData * SharedData::self" (?self@SharedData@@0PAV1@A) already defined in SharedData.obj

TempestLoader.obj : error LNK2005: "private: static int SharedData::refcount" (?refcount@SharedData@@0HA) already defined in SharedData.obj


Название: Re: error LNK2005 MSVC2010
Отправлено: pastor от Май 14, 2010, 14:54
Цитировать
SharedData* SharedData::self = NULL;
int SharedData::refcount = NULL;

Перенеси инициализацию в SharedData.cpp


Название: Re: error LNK2005 MSVC2010
Отправлено: romank от Май 14, 2010, 14:58
Спасибо