2015-10-29 104 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