簡體   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