2014-09-24 69 views
1

我想弄清楚如何我可以或爲什麼我不能訪問這個類的成員。首先,我會告訴你什麼有用,所以你知道我在想什麼,然後我會告訴你我不能做什麼。訪問另一個類的指針數組的一個類的成員

我可以做的是這樣的:我有一個成員的類。我創建了該類的指針數組,並且創建了它的新部分(通過循環),這很好。我也可以創建另一個類,使用類似的數組,甚至創建新的實例並初始化它們,但是當我嘗試訪問它們時,我遇到了問題。

此代碼幾乎正常工作:

#include <iostream> 
using namespace std; 

class testClass{ 
    public: 
    int number; 
}; 

class testPoint{ 
    public: 
    testClass testInstance; 
    testClass *testclassArray[5]; 
    void makeArray(); 
    void setToI(); 
}; 

void testPoint::makeArray(){ 
    for (int i = 0; i < 5; i++){ 
     testclassArray[i] = new testClass; 
    } 
} 

void testPoint::setToI(){ 
    for (int i = 0; i < 5; i++){ 
     (*testclassArray[i]).number = i; 
    } 
} 

int main(void){ 
    testPoint firstTestPoint; 
    firstTestPoint.makeArray(); 
    firstTestPoint.setToI(); 
// EXCEPT FOR THIS LINE this is where I have problems 
    cout << firstTestPoint.(*testclassArray[0]).number << endl; 
    return 0; 
} 

我知道這應該工作監守這個作品

int main(void){ 
    testPoint firstInstance; 
    firstInstance.testInstance.number = 3; 
    cout << firstInstance.testInstance.number << endl; 
    // and this works 
    return 0; 
} 

和這個作品

int main(void){ 
    testClass *testPointer[5]; 
    for (int i = 0; i < 5; i++){ 
     testPointer[i] = new testClass; 
     (*testPointer[i]).number = i; 
    } 
    cout << (*testPointer[0]).number << endl; 
    return 0; 
} 

所以我爲什麼不能以同樣的方式訪問cout函數上的成員?

回答

3

以下是無效的語法:

cout << firstTestPoint.(*testclassArray[0]).number << endl; 

最常見的方式來寫你是什麼努力做到的是:

cout << firstTestPoint.testclassArray[0]->number << endl; 

但是,如果你願意,你也可以這樣寫:

cout << (*firstTestPoint.testclassArray[0]).number << endl; 

(第二種方式是不太常見。)

.的操作者用來直接對象的訪問成員,例如a.member其中a可能會被聲明爲struct A a;->運算符用於訪問間接對象的成員(又名指向對象的指針),例如b->member其中b可能宣佈爲struct B* b = new B();

2

您正以不正確的方式解引用變量。 試試

cout << firstTestPoint.testclassArray[0]->number << endl; 

改爲。 以同樣的方式,第二次嘗試,它爲你的作品,也已被寫入:

out << testPointer[0]->number << endl; 
0

嘗試使用此代碼:

cout << firstTestPoint.testclassArray[0]->number << endl; 
相關問題