我有一個無法移動或複製的類型(通過使必要的構造函數和運算符變爲私有)。但是,當我試圖編譯它們的std :: list時,操作失敗,出現了一個非常奇怪的錯誤(爲簡潔起見,縮減了類名稱)。std :: list的類型要求
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory(202)
: error C2248: 'T::T' : cannot access private member declared in class 'T'
當然,鏈接列表中的類型並非是可移動或可複製的。
當這些成員被公開時,代碼會很好地編譯 - 即使std :: list試圖訪問它們,它也是一個無法解析的外部函數,因爲它們只是被聲明爲private。是沒有意義的:(
「當然,它不是一個鏈接列表中的類型是任意可移動或可複製的。」那麼它應該如何從列表外部獲得值到內部該列表?:) – GManNickG 2010-06-19 20:53:29
通過使用調整大小和默認構建它們。爲什麼沒有明確的功能來添加默認構建的函數,我不知道。 – Puppy 2010-06-19 20:54:58
因爲,由於容器需求明確指出對象必須是可複製構建的,所以沒有太多理由去打擾它。 – 2010-06-19 22:12:46