使用指针成员对象的指针成员作为函数的参数

时间:2014-08-26 12:32:34

标签: c++ function class pointers member

基本上我想要的是一个可以访问* bx [i] .var的所有元素的函数(我是任意的,*因为&#34; var&#34;是指针本身)。< / p>

在普通指针如

的情况下,这是可能的
double * point = new double [N]

被称为

double func (double * p){
  return p[2];
}

但似乎难以概括为类指针成员的情况,这些成员本身就是指针成员的对象,我无法找到如何正确执行此操作的说明(如果我没有得到,请原谅我命名权 - 这对我来说还是有些新鲜事。)

更具体地说,我已经制作了一个简化的代码来说明问题:

class A {
public:
  double * var = new double;
};

class B {
  int N;
public:
  B (int, int);
  A * x = new A[N];
};

B::B (int d, int V) {
  N = d*V;
}

double func (double * a){
  return a[2];
}

int main () {

  int d = 3, V = 4;

  B b (d,V);

  *b.x[2].var = 1.2;

  cout << func(b.x.var) << "\n";

  return 0;
}

我曾希望输出为1.2,但毫不奇怪,它不会编译。令我感到震惊的是函数中的a [2]以及b.x.var可能是错误的,但尽管我付出了努力,但我还是无法实现正确的语法。

最终我想将指针var推广为double * var = new double [n],如果提供的任何解决方案也适用于这种情况,那将会很棒。

作为替代方案,我尝试在函数中给出输入A * a并返回* a [2] .var然后用func(bx)调用函数,但是在编译时它会给出一个&#34;分段错误11&#34;

最后我意识到我可以只使用一个(或没有)类,但这只是对问题的规避,而不是解决方案。

非常感谢任何见解或解决方案。

2 个答案:

答案 0 :(得分:0)

代码存在很多问题:

class A {
    public:
      double * var = new double;
};  
  1. 什么是var?
  2. 您无法在类中初始化数据(使用构造函数)

答案 1 :(得分:0)

我不知道你要做什么,但这里有编译和返回有效数据的内容,并带有内联注释:

#include <iostream>

using namespace std;

class A {
public:
  double * var = new double;
};

class B {
  int N;
public:
  B (int, int);
  A * x; // you can't initialize with N here
};

B::B (int d, int V) {
  N = d*V;
  x = new A[N]; // initialize here instead when N is defined
}

double func (A *a){
  int i = 0;
  return *(a[i].var);
}

int main () {

  int d = 3, V = 4;

  B b(d,V);

  //this value is accessed by func, make sure it has a value
  *(b.x[0].var) = 2.2;

  cout << func(b.x) << "\n";

  return 0;
}

编辑:在OP的评论后更新了代码