传递数组指针并在函数内部使用

时间:2012-10-21 17:57:42

标签: c++ arrays c++11

我想知道如何将指针传递给函数中的数组,并且在函数内部我仍然希望将它用作指针。

process(Shape **sp);

int main(){
  Shape* objShape[5];
  process(objShape);
}

process(Shape **sp) {
  sp[0]=&objRec; // No Errors
  cout<<sp[0]->computeArea(); // WORKS
}

但是当我将COMPUTEAREA()方法移到另一个不起作用的方法时

getArea(Shape **sp){
  cout<<sp[0]->computeArea(); // I get a segmentation fault error;
}

objRec是Shape类的子类。我需要使用动态绑定来评估计算区域。

5 个答案:

答案 0 :(得分:1)

简单,就像这样

sp[0]=objRec;

你对所有的指针感到困惑。你有一个指向对象数组的指针。但是你的代码写得好像你有一个指向对象指针数组的指针,这根本不是一回事。

在你的第二段代码中你有一个指针数组,这就是你的第二段代码编译的原因。

克里斯指出,你还需要失去const

答案 1 :(得分:1)

process(Shape const *sp){
    sp[0]=&objRec;
}

您使用了const。所以它没有用。尝试删除const。您无法修改const类型的值。

更多的是你正在分配objRect的地址。试试这个:

process(Shape const *sp){
    sp[0]=objRec;
}

答案 2 :(得分:1)

从签名中删除const

process(Shape *sp)

如果objRec的类型为Shape,则不要从中获取指针:

process(Shape *sp){

  sp[0]=objRec; 
}

答案 3 :(得分:0)

您的=服务器 objRec

中没有超载shape class运营商
objRecTYPE& operator=(objRecTYPE& s)
{
    // your code

    return *this;
}

答案 4 :(得分:0)

您正尝试将sp [0]的值分配给objRec的地址。试着省略地址运营商。