2011-11-20 41 views
0

我有2類CVKinectWrapper.cppmain.cpp。在CVKinectWrapper中,在bool CVKinectWrapper::update(){ ...中我有一個變量XnSkeletonJointPosition righthand;我想訪問main.cpp類中的這個變量。爲此我創建了一個沒有可行的超載

`void CVKinectWrapper::getRightHand(XnSkeletonJointPosition *righthand){ 
    //*righthand = righthand; 

    righthand->copyTo(*righthand); 
}` 

直接分配不工作,我在*右邊=右手「得到這個錯誤=」 不匹配「運算符=。 copyTo不起作用,因爲右手的數據類型沒有這個方法。

對於額外的信息:

這是怎麼我在主類訪問包裝= CVKinectWrapper *wrapper = CVKinectWrapper::getInstance();

wrapper->getRightHand(XnSkeletonJointPosition *righthand) 

現在我的問題是如何從CVKinectWrapper訪問右邊變量的主類。

這可能是一個非常基本的問題,但我相當新的C++。 在此先感謝。

+0

爲什麼是個問題標籤爲'objective-c'(我已經刪除了帽子標籤)?還要考慮將完整的錯誤消息添加到有關編譯器/鏈接器錯誤的問題中,您已經刪除了重要信息(如'='兩側的對象類型)。最後,在添加代碼時,請確保您添加的代碼是程序中的代碼。我很懷疑'main'中的調用實際上是'wrapper-> getRightHand(XnSkeletonJointPosition * righthand)' –

+0

我更新了錯誤信息。是的,這是真正的主打電話。 – Ojtwist

+0

您仍然從錯誤消息中刪除參數的類型。如果這真的是'main'中的調用,那麼當你試圖將'XnSkeletonJointPosition * righthand'作爲參數傳遞給函數時,你會遇到另一個問題,這根本沒有任何意義(*看起來像*鍵入一個可能未定義的標識符...你是否打算創建一個新的變量?你不能。考慮按值返回,而不是以指針作爲參數) –

回答

2

當詢問編譯器錯誤時,提供準確的錯誤消息通常是一個好主意,在這種情況下,它可能指出兩個參數的類型。無論如何,我想我可以猜出問題所在。

你提到你有一個名爲righthand變量,我認爲實際上是一個成員的類的,和你想的值複製到傳遞給函數getRightHand不同的變量。現在問題是該函數的參數與成員名稱相同,並且它是shadowing它。在getRightHand內部,標識符righthand指的是參數,而不是成員。您可以通過改變參數的名稱或出線訪問構件解決此問題:*righthand = this->righthand;

作爲具體的錯誤消息時,操作*righthand = righthand;字面意思是指針righthand的值分配(函數參數)到它指出的對象,這沒有多大意義。從設計的角度來看,因爲它的功能是在C++中完全是非習慣,和也許應該改爲:

const XnSkeletonJointPosition& CVKinectWrapper::getRightHand() const { 
    return righthand; 
} 

,主叫方會做:

XnSkeletonJointPosition res = wrapper.getRightHand(); 
+0

當我使用你提出的方法時,我得到這個錯誤:'getRightHand'的行外定義不匹配'CVKinectWrapper'中的任何聲明。順便說一句,我也有一個.h文件。 h文件中是否應該有某種聲明? – Ojtwist

+0

@Ojtwist:班級成員的聲明和成員的定義必須匹配。我真的相信你需要從一本關於C++的入門書開始,SO是一個具體問題的地方,但是你需要一個完整的教程來指導你完成基本知識...... –

+0

是的,它似乎是一個好主意得到一個教程,讓我通過基礎知識。儘管如果可能的話我想要一個解決方案。所以我的問題是,我將如何在你提出的方法的h文件中做這個聲明? – Ojtwist