我在將工作pimpl類轉換爲單身人士時遇到了一些麻煩。這裏是起點代碼:將單身人士功能添加到Pimpl類
apirequest.h
class ApiRequestPrivate;
class ApiRequest
{
public:
ApiRequest(int);
~ApiRequest();
int method1();
private:
ApiRequestPrivate* const d;
};
apirequest_p.h
#include "apirequest.h"
class ApiRequestPrivate
{
public:
ApiRequestPrivate(int);
int method1();
private:
int member1;
};
apirequest.cpp
#include "apirequest.h"
#include "apirequest_p.h"
ApiRequestPrivate::ApiRequestPrivate(int value)
{
member1 = value;
}
int ApiRequestPrivate::method1()
{
return member1;
}
ApiRequest::ApiRequest(int value) : d(new ApiRequestPrivate(value))
{
}
ApiRequest::~ApiRequest()
{
delete d;
}
int ApiRequest::method1()
{
return d->method1();
}
首先,我做了以下修改:
apirequest.h
class ApiRequest
{
public:
~ApiRequest();
static ApiRequest * getApiRequest(int);
int method1();
private:
ApiRequestPrivate* const d;
ApiRequest(int);
};
apirequest_p.h
class ApiRequestPrivate
{
public:
...
static ApiRequest * getApiRequest(int);
private:
...
static ApiRequest * m_apiRequest;
};
apirequest.cpp
...
ApiRequest * ApiRequestPrivate::getApiRequest(int value)
{
if(m_apiRequest == 0) {
m_apiRequest = new ApiRequest(value);
}
return m_apiRequest;
}
...
ApiRequest * ApiRequest::getApiRequest(int value)
{
return d->getApiRequest(value);
}
但編譯失敗與各種錯誤,其中第一個是:
In file included from apirequest.cpp:1:0:
apirequest.h: In static member function ‘static ApiRequest* ApiRequestPrivate::getApiRequest(int)’:
apirequest.h:17:5: error: ‘ApiRequest::ApiRequest(int)’ is private
ApiRequest(int);
^
apirequest.cpp:17:46: error: within this context
m_apiRequest = new ApiRequest(value);
^
然後我tryed移動ApiRequest()構造函數回到公衆和編譯失敗,下面的代碼:
In file included from apirequest.cpp:1:0:
apirequest.h: In static member function ‘static ApiRequest* ApiRequest::getApiRequest(int)’:
apirequest.h:17:30: error: invalid use of member ‘ApiRequest::d’ in static member function
ApiRequestPrivate* const d;
^
apirequest.cpp:39:12: error: from this location
return d->getApiRequest(value);
^
你對此任務有任何建議?非常感謝
在'ApiRequest :: getApiRequest()'中創建對象工作正常。謝謝。 – bullet