看板 C_and_CPP 關於我們 聯絡資訊
借提順便問一下 如果main include test.h就一切解決了 但如果include test.h 是不是就失去proxy的意義阿其實不是很確定.... 問題應該是出在第一次呼叫set回傳test&你又用這去呼叫了set 但我試著去改一下 如果把set全部return this回傳test* 如果main不include test.h情況下 只呼叫一次 abc.setTime(~~~); 是OK的 但如果還是return test& 連呼叫一次都不OK 差異在哪裡呢?? 再問一個問題 class XXX { 裡面只寫 void Foo(); 這樣叫宣告嗎?? } 那這整包class包一堆宣告 這算是class的宣告? 那單純寫 class XXX;這又算是稱為什麼? 到現在我還是分不清要怎麼稱呼 所以只要.cpp在上面 要用class物件之前要讓.cpp知道class{}這種宣告 他就會去link真正定義裡面這些function的cpp 有了宣告才有辦法算大小 才知道要怎麼跳offset這樣嗎 以上請大大解惑@@ thx ※ 引述《duozero (豬喔)》之銘言: : 遇到的問題: (題意請描述清楚) : 我目前正在練習 使用this指標 進行 連續函式呼叫 : 以及使用 代理類別 隱藏 類別資訊 : 這兩種方法單獨使用都沒問題 : 但如果將兩種技巧同時使用就會出現錯誤 : 變得無法使用代理類別來隱藏資訊 : 希望得到的正確結果: : 能在增加代理類別的情況下 : 正常使用(.)連續呼叫函數 : 程式跑出來的錯誤結果: : 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"好像就失去了使用代理類別的目的了 : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : Visual C++ : 有問題的code: (請善用置底文標色功能) : test.h的部分 : class test : { : public: : test(int v):value(v) : { : } : test &setTime(int a,int b,int c) : { : this->a=a; : this->b=b; : this->c=c; : return *this; : } : int getTime()const : { : return a+b+c; : } : private: : int value,a,b,c; : }; : ========================================================================== : proxy.h的部分 : class test; : class proxy : { : public: : proxy(int); : ~proxy(); : test &setTime(int,int,int); //ERROR : int getTime()const; : private: : test *ptr; : }; : =========================================================================== : proxy.cpp的部分 : #include"proxy.h" : #include"test.h" : proxy::proxy(int n):ptr(new test(n)) : { : } : proxy::~proxy() : { : delete ptr; : } : test & proxy::setTime(int a,int b,int c) : { : return ptr->setTime(a,b,c); : } : int proxy::getTime() const : { : return ptr->getTime(); : } : =========================================================================== : main的部分 : #include<iostream> : #include"proxy.h" : using std::cout; : using std::endl; : int main() : { : proxy abc(5); : abc.setTime(1,3,5).setTime(2,4,6); //ERROE : cout <<abc.getTime()<<endl; : system("pause"); : return 0; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.86.31