本人大一 剛學C++不久 想用cocos2dx做個小游戲練練手
今天在做虛擬搖桿的時候 想通過搖桿類的成員函式得到搖桿觸點偏轉方向上的坐標增量
但是在圖1所示代碼里運行錯誤
除錯顯示this是空指標
一下子就把我類和指標基礎嚴重不牢的問題暴露出來了..
這里想請教大家幾個我一直沒搞明白的問題
1.類的不同物件對應的同名成員變數應該不是同一個吧 那么為什么圖2代碼里rockerBGR這個成員變數在圖3里也有相同的值?
2.關于類的空指標只能參考成員函式不能涉及成員變數的問題我在百度了解到了,那么我如果想要在圖1里獲取這些成員變數的值(已經確定的 比如代碼2的rockerBGR)并通過成員函式回傳一個向量 我該怎么做?
初學C++ 基礎有很多漏洞 可能組織的語言和提的問題有些不倫不類的 請大家多多包涵
如果有什么沒看懂我的問題的地方歡迎留言我再解釋一下
初次發帖


先謝謝大家啦!!
uj5u.com熱心網友回復:

我十幾年前啃c/c++ 頭一年是暈的,第二年才清醒。除了惡補學習練習,沒有其他捷徑。
uj5u.com熱心網友回復:
頂一波 求助啊!!uj5u.com熱心網友回復:
搞的我也想寫點游戲了。你想干嘛嘛沒聽懂
uj5u.com熱心網友回復:
哪里有錯誤?沒看到喃?報錯按理說應該有紅線啊啥的對吧
uj5u.com熱心網友回復:
但是在圖1所示代碼里運行錯誤==>
圖1里邊沒有直接呼叫到圖2、圖3的代碼。所以需要看到圖2和圖3兩個函式具體是怎么被呼叫的。
1.類的不同物件對應的同名成員變數應該不是同一個吧
==>
這個得看情況:
假設有兩個物件HRocker A, B;
HRocker中有成員變數CustomColor *color;
物件初始化的時候:
相同情況:
CustomColor *color = new CustomColor(11, 22, 12);
A = HRocker(color);
B = HRocker(color);
不同情況:
CustomColor *color1 = new CustomColor(11, 22, 12);
CustomColor *color2 = new CustomColor(11, 22, 12);
A = HRocker(color1);
B = HRocker(color2);
注意:這里的color1和color2只是記憶體地址不一樣,但是物件內容是一樣的,所以你問兩個物件是否一樣時要分清楚記憶體地址和具體內容。
在C++面向物件世界中,任何事物有需要一塊區域來展示自己,所以必須先找到一個場地(申請記憶體),然后在這個場地上展現具體的事物(物件內容)。
uj5u.com熱心網友回復:
class A
{
int x;
int getX()
{
return x;
}
}
main()
{
A* a = null;
a->getX();//肯定報錯啊,你剛剛說了類的空指標如果強行去用成員函式,那該函式不能操作成員變數。否則肯定不正常、且極有可能報錯。
}
uj5u.com熱心網友回復:
------------------------------------------------------------------
像上面這個代碼a->getX();
就形如如下的偽代碼一樣:
getX(a【作為this指標】,其它引數...)
所以當a = null【0】時
相當于
getX()
{
【這里面的this指標指向了記憶體0x00000000...】
【在這里面訪問成員變數,比如x,就相當于,以this(0x00000...)為起點,偏移某某位元組取得x的存盤位置】
【你認為你需要的x會在記憶體起始不遠處嗎?肯定不是,所以此時操作這些成員變數一定不是程式正常的成員變數】
}
uj5u.com熱心網友回復:
謝謝耐心的講解!!我已經明白啦 空指標確實不能呼叫成員變數 最多呼叫不涉及成員變數的成員函式
之所以圖2圖3 可以用同一個成員變數的值應該是OnTouchMoved這個系結監聽事件的函式為他們提供了一樣的指標(猜的 因為參考圖2函式的函式里有系結監聽事件的操作)
再次感謝!
uj5u.com熱心網友回復:
關于這個空指標的問題我已經明白了
不過又遇到了新的打包移植到安卓平臺的問題哈哈
做游戲應該是挺有趣的 只不過我認為選一個生態更加健康的引擎比較好 老哥加油啊!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69236.html
標籤:新手樂園
下一篇:C編程遇到的一些小細節
