基本上我想要的是一个可以访问* 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;
最后我意识到我可以只使用一个(或没有)类,但这只是对问题的规避,而不是解决方案。
非常感谢任何见解或解决方案。
答案 0 :(得分:0)
代码存在很多问题:
class A {
public:
double * var = new double;
};
答案 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的评论后更新了代码