當談到創建類時,我被告知沒有公共數據成員。這很好,我明白爲什麼,但這是我的問題。我有一個我在類中使用的結構(線性鏈表)。我真的很想將其中一個struct字段(一個數組)初始化爲NULL,這樣我就可以檢查客戶端是否傳遞了有效的結構,而不是未經初始化的那些充滿垃圾值的結構。我意識到C++不會讓我在struct聲明中設置一個默認值,所以我如何保護客戶端不給我垃圾?結構或類,公共數據呢?
struct task {
char *description;
char *name;
float time_remaining;
float time_spent;
};
然後在我的課,我試圖做一些事情,如:
//I am making a copy of "to_add" and storing it in the LLL
int list::add_to_list(const task & to_add)
{ /.../ }
我不希望用戶添加一堆未初始化「任務的」到鏈表...什麼去做?當我將該結構轉換爲類並將數據成員移動到私有時,我嘗試訪問數據成員以製作它們的副本。我非常小心,不要做任何事情來影響var的值,但是我無法擺脫編譯器給我提供有關「錯誤:將'const task''作爲'char'task :: get_comp_name ()'丟棄限定符[-fpermissive]「(」get_comp_name「)是我確定沒有編輯任何值的獲取者之一,只是傳給我一個副本)請在拍攝自己之前幫助我。在臉上。
我無法理解問題。沒有公共數據成員意味着訪問可能對「外部」世界「有趣」的數據的唯一方式是通過吸氣劑,如果需要設置它們,則必須通過一個setter來完成。當一個實例被創建時,你可以將你的私有成員初始化爲任何你想要的。任何從外部作爲方法參數傳遞的東西都可能是不安全的,但這是「正常的」,我不明白你是如何將它與非公開數據要求相耦合的,它們在我看來有兩個不同的「事實」。你能解釋得更好嗎? – ShinTakezou 2012-04-20 05:42:12
錯誤是因爲你沒有聲明函數const。如果你真的想提供訪問者而不是公共數據,那麼getter應該像'char const * get_comp_name()const;'那樣。 – 2012-04-20 06:25:51