我有一個類,其中包含ID3D11Device
成員,我想製作static
,因爲現在我想讓ID3D11Device
被多個Entity
類實例訪問。問題是,我無法訪問Direct3D
類,將靜態成員放置在對象的外部,而無需直接實例化Direct3D
類。通過外部訪問靜態成員並通過繼承C++
由於多個類從Direct3D
類(而這又從WindowsClass
繼承了hwnd
細節)繼承,我想保持它作爲一個基類,以保持與所有類別的Direct3D
繼承的這個例子訪問提出:
class Direct3D: WindowsClass{
public:
Direct3D();
~Direct3D();
static ID3D11Device* Device;
}
和繼承的類:
class EntityType: Direct3D{
public:
EntityType();
~EntityType();
void SomeDeviceDependentFunction();
}
當構件被定義爲:
該類Direct3D
在
Direct3D.h
定義
void EntityType::SomeDeviceDependentFunction(){
//Perform some action calling Direct3D::Device.
}
注意,EntityType
在EntityType.h
定義,等等。所以一切看起來肉汁的概念,直到我去編譯並收到可怕的錯誤:
Error 52 error LNK2001: unresolved external symbol "public: static struct ID3D11Device * Direct3d::Device" ([email protected]@@[email protected]@A) C:\Us...tions.obj Win32Project1
和:
Error 40 error LNK2005: "class std::vector<struct IndexVertexKey,class std::allocator<struct IndexVertexKey> > Geometry" ([email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@A) already defined in D3DPipeline.obj C:\Use...nagement.obj Win32Project1
(請注意,這裏的編譯錯誤不直接涉及到上面給出的例子,但是由它們造成的。)
總而言之,如何控制繼承類,它們是鬆散耦合的(object to object)還是我可以在哪裏參考包括安全而不會死亡的交叉引用?
必須在類定義之外定義'static'成員變量。 'ID3D11Device * Direct3D :: Device = <適當的初始值>;' –
謝謝,我正在嘗試這個。 –