借提順便問一下
如果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