繁体   English   中英

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

[英]Using a pointer member of a pointer member object as the argument of a function

基本上,我想要的是一个可以访问* bx [i] .var的所有元素的函数(i是任意的,并且*在那里,因为“ var”本身就是指针)。

在像这样的普通指针的情况下这是可能的

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]以及bxvar可能都是错误的,但是尽管我付出了很多努力,但我仍无法实现正确的语法。

最终,我想将指针var推广为double * var = new double [n],如果在这种情况下提供的任何解决方案也能奏效的话,那就太好了。

作为替代方案,我尝试在函数中提供输入A * a并返回* a [2] .var,然后使用func(bx)调用该函数,但是在编译正常的情况下,它给出了“分段错误11”。

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

任何见解或解决方案均受到高度赞赏。

代码有很多问题:

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

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

#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评论后更新的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM