如何通过指针从函数访问类的成员?

时间:2015-10-29 08:13:52

标签: c++ pointers

我希望

  1. 创建一个类/结构项(c1
  2. 的数组
  3. 然后创建一个指向原始数组(*cp1)的指针数组,可以对其进行排序
  4. 然后从函数中访问该类的成员。
  5. 但是我在初始函数调用时遇到了问题。

    这是我的基本代码:

    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;
    }
    

3 个答案:

答案 0 :(得分:2)

首先,编译器在您调用它的位置不知道您的garage函数,因为它在main下面定义。要修复它,要么将函数定义放在main上面,要么用原型引入它。

其次,在int p = (*ar[n / 2])->speed;行,*ar[n/2]不是指针,因此您应该使用.代替->,如int p = (*ar[n / 2]).speed;

答案 1 :(得分: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 :(得分:1)

必须先声明Funcion车库,然后才能推荐它。

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

int main()
{
    //...
} 

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

C ++中的函数main应具有返回类型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;
}