2012-04-24 91 views
1

我可能已經習慣了Java,並且發現它比應該更難。這裏有我的。使用目標和調用方法?

myObject[0] = new item1(this); 

class item1 
{ 
private: 
    int x; 
    int y; 

public:  
    item1(passedPointer* pOne) 
    { 
     x = 5; 
     y = 5; 
    } 

    int returnX() { return x; } 

    int returnY() { return y; } 
} 

然後在另一個方法我想我可能只是說:

void check() 
{ 
    int y = item1.returnY(); 
    int x = item1.returnX();    
} 

但我得到了常見的錯誤:非靜態成員引用必須是相對於特定對象。

這個類的item1只有一個實例,那麼最好的方法是什麼?這只是我實際做的簡單的片段,而不是實際的代碼。

+3

你應該瀏覽一本關於C++ OOP的書。它與Java有點不同。 – chris 2012-04-24 15:24:02

+2

...或超過脫脂。 – Jon 2012-04-24 15:27:09

+0

您應該發佈實際的代碼,因爲您發佈的代碼在C++和Java中都沒有意義。 – 2012-04-24 15:30:21

回答

3

Item1是一個類。在訪問其非靜態成員之前,您必須創建它的一個實例。嘗試尋找here獲取一些基本信息。

3
void check(){ 
    int y = item1.returnY; 
    int x = item1.returnX; 
} 

這也將是在Java中不正確,因爲無論returnX也不returnY是靜,你需要在其上應用操作的對象,你還需要在方法調用的括號:

void check() { 
    item1 i; 
    int y = i.returnY(); 
    int x = i.returnX(); 
} 
3

也許實現Singleton pattern不會對你造成傷害,因爲你只需要一個對象實例。您可以將對象聲明爲全局函數或靜態函數,然後獲取值。

然後,您也可以將函數聲明爲靜態函數,並添加另一個函數來初始化需要由這些方法返回的變量的靜態值。根據您的情況,有很多解決方案,您不能完全掌握您粘貼的短代碼。

2

您與線創建的類ITEM1的實例

myObject[0] = new item1(this); 

不同於JAVA,C++中有指針和新指針返回到對象(因此myObject的[0]是指向該實例)所以你需要 - >運算符。要激活你應該寫的方法:

myObject[0]->returnX(); 

如果你希望只有一個實例而不是實現類作爲一個單例。