2015-10-29 101 views
2

我想如何通過指針從函數訪問類的成員?

  1. 創建類/結構的物品的一個陣列(c1
  2. 然後創建指針的陣列,以原來的陣列(*cp1),其可以被排序
  3. 然後訪問成員在一個函數內的類。

但是我陷入了最初的函數調用。

這裏是我的基本代碼:

所有的
struct Car 
{ 
    int speed; 
}; 

Car c1[5]; 
Car *cp1[5]; 

int main() { 
    for (int i=0;i<5;i++) { 
     c1[i].speed = i; 
     cp1[i] = &c1[i]; 
    } 

    garage(cp1, 5); 
} 

void garage(Car **ar, int n) { 
    int p = (*ar[n/2])->speed; 
} 
+1

你遇到了什麼問題?任何特定的錯誤信息,等等? – Petr

+0

將錯誤消息**添加到您的問題**中,而不是在評論中。 – Downvoter

+0

您只能調用之前已聲明的函數。 – Downvoter

回答

1

Funcion車庫使用.代替->,因爲必須聲明之前,你可以參考它。在C++

void garage(Car **ar, int n); 

int main() 
{ 
    //... 
} 

void garage(Car **ar, int n) { 
    //... 
} 

功能主要應具有返回類型int

int main() 
{ 
    //... 
} 

和函數中的正確表達看起來

void garage(Car **ar, int n) { 
    int p = (*ar)[n/2]).speed; 
} 

或者

void garage(Car **ar, int n) { 
    int p = ar[n/2]->speed; 
} 

或者

void garage(Car **ar, int n) { 
    int p = (*ar[n/2]).speed; 
} 
+0

我已經標記爲正確的,因爲雖然所有的答案都指出我的實際錯誤是忘記了函數的原型,但是Vlad是正確的,我的函數表達式是正確的,並且他給出了也可以工作的替代形式 – David

+0

@David You受歡迎的。:) –

1
struct Car 
{ 
    int speed; 
}; 

Car c1[5]; 
Car *cp1[5]; 

void garage(Car **ar, int n); // forward declare garage 

int main() 
{ 
    for (int i=0;i<5;i++) { 
     c1[i].speed = i; 
     cp1[i] = &c1[i]; 
    } 

    garage(cp1, 5); 
} 


void garage(Car **ar, int n) { 
    int p = ar[n/2]->speed; // -> dereferences the pointer, you don't need to 
} 
2

首先,你的​​功能是不知道在您調用它,因爲它被定義如下main的地方編譯器。要修復它,或者將函數定義放在主要的上面,或者將它引入原型。

其次,在該行int p = (*ar[n/2])->speed;*ar[n/2]不是指針,所以你應該在int p = (*ar[n/2]).speed;

+0

我的實際錯誤是忘記了原型的功能。 – David