2012-06-05 61 views
0

我有一組存儲靜態常量數據成員的工具類。現在我需要在功能類中使用這些數據成員。我打算使用引用(不要指針)到靜態const對象,但不斷收到下面的錯誤。你能指出代碼中的邏輯/技術錯誤嗎? âstaticData&距離型的表達âconst引用靜態const數據對象

#include <string> 

class staticData 
{ 
    public: 
    static const int cs = 1; 
    static const staticData data1; 

    private: 
    staticData(int id_): _id(id_) //NOTE: Private constructer, static access only!! 
    { } 

    int _id; 
}; 

const staticData staticData::data1(1001); 

class testReference 
{ 
    public: 
    testReference(): _member(staticData::data1) 
    {} 

    private: 
    staticData& _member; 
}; 

的類型的引用無效初始化staticDataâ

回答

2

您正在嘗試通過非const引用來引用一個const對象。

因此,原始對象可以通過引用進行修改,因爲引用是非const,因此您打算將對象聲明爲const時違反合同。

有2個選項:

  • 刪除conststatic const staticData data1;
  • 做參考constconst staticData& _member;

編輯:

根據您的意見,您可以:

class testReference 
{ 
    public: 
    testReference(): _member(&staticData::data1) 
    {} 

    private: 
    staticData const * _member; 
}; 

這樣,你可以改變什麼_member指向(不可能與引用),但你不能改變對象本身。

+0

我想保留static const staticData data1,但希望能夠更改_member可能引用的內容。那可能嗎? – vid

+0

@vid no。引用不能改爲引用不同的對象。它總是會引用'data1'。儘管如此,你可以使用一個指針。 –

+0

@vid請參閱編輯... –

1

_member是允許突變的參考。 data1是不可變的。提供只讀對象的可寫視圖是不可能的。