【发布时间】:2014-08-26 12:32:34
【问题描述】:
基本上我想要的是一个可以访问 *b.x[i].var 的所有元素的函数(我是任意的,* 在那里,因为“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] 以及 b.x.var 可能是错误的,但尽管我努力了,但我还是无法实现正确的语法。
最终我想将指针 var 概括为 double * var = new double [n],如果提供的任何解决方案也能在这种情况下工作,那就太好了。
作为替代方案,我尝试在函数中提供输入 A * a 并返回 *a[2].var,然后使用 func(bx) 调用该函数,但是在编译正常时它给出了“分段错误 11”。
最后我意识到我可以只使用一个(或没有)类,但这只是规避问题,而不是解决方案。
高度赞赏任何见解或解决方案。
【问题讨论】:
-
我希望您意识到
A * x = new A[N];在未初始化时使用了N。 -
另外,
x[2]返回一个指向A的指针,所以它应该是 *(bx[2]->var) [对我来说更容易阅读一些...] -
您可以使用
std::vector代替原始的拥有数组。 -
@Nim x[1] 不会返回指针,它会返回从 x 到索引 1 的 A 的引用
-
@chris 我没有。我也不知道它必须移动到构造函数才能正常工作。该问题现已修复 - 谢谢!
标签: c++ function class pointers member