![](/img/trans.png)
[英]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.