[英]Using std::bind with member function, use object pointer or not for this argument?
[英]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;
};
我不知道您要做什么,但这是编译并返回有效数据的内容,并带有内联注释:
#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.