看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《duozero (豬喔)》之銘言: : 希望得到的正確結果: : 能在增加代理類別的情況下 : 正常使用(.)連續呼叫函數 : 程式跑出來的錯誤結果: : main.cpp(11) : error C2027: 使用未定義型別 'test' : proxy.h(1) : 請參閱 'test' 的宣告 : 這部分有點不懂 : proxy.h 內的 test *ptr 這邊 : 只要有使用前置類別宣告 class test; : 就可以正確捕捉到 test 這個型別 : 但test &setTime(int,int,int) 卻不能 : 一定得#include"test"才可以 : 但使用#include"test"好像就失去了使用代理類別的目的了 : proxy.h的部分 : class test; : class proxy : { : public: : proxy(int); : ~proxy(); : test &setTime(int,int,int); //ERROR : int getTime()const; : private: : test *ptr; : }; 你想要達成的效果是所有對 test 的操作得全部透過 proxy 那麼你就不應該回傳一個 test 的實體(或者如這裡是 ref)回去給呼叫 proxy 的人 這樣子外面 (在你這裡是 main) 就非得知道 test 是什麼不可了 我會改成這個樣子: class proxy { //略 proxy& setTime(int,int,int); }; proxy& proxy::setTime(int h, int m, int s) { ptr->setTime(h,m,s); return *this; } 反正你之後也是要操作 test 也得經過 proxy 那就回傳 proxy 回去就行了 --- 不過如果是指標的話又不一樣了 指標只不過是個指向某處的值 所以在不讓人知道指向的東西是什麼的情況下 是可以把這指標做為所謂的 handle 給丟出去給外面 這樣外面只會知道要做事時要把 handle 也傳進去 但他不會知道 handle 後面是什麼 (話說回來 這種 handle 的概念其實可以看成是在沒有物件導向的 C 裡面的 proxy pattern....) -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92
duozero:確實是這樣沒錯,看來我搞混proxy的用法了Orz 06/12 14:40