मुझे एक समस्या है जब मैं किसी सरणी के पॉइंटर को पास करने का प्रयास करता हूं (जिसमें मेरे प्रोग्राम में कुछ फ़ंक्शंस द्वारा आवश्यक पैरामीटर शामिल होते हैं), जिसे तब उन कार्यों में पारित किया जाना चाहिए। जीएसएल उदाहरण के लिए मुझे इस तरह से पैरामीटर पास करना चाहता है।मैं संरचना/कक्षा में स्थिर 2 डी सरणी के सूचक को कैसे पास कर सकता हूं?
एक छोटी सी उदाहरण कार्यक्रम इस प्रकार है:
#include <iostream>
using namespace std;
struct myparams
{
double * a;
double ** b;
};
int main()
{
double c[10] = {0,1,2,3,4,5,6,7,8,9};
double d[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
double** e = new double*[4];
for (int i = 0; i < 4; i++) {
e[i] = new double[3];
}
myparams params;
// THIS WORKS:
params.a = c;
for (int i = 0; i < 10; i++) {
cout << params.a[i] << endl;
}
// THIS DOESN'T WORK
params.b = d;
// THIS WORKS:
params.b = e;
delete[] e;
}
क्या संकलक "cannot convert 'double[4][3]' to 'double**' in assignment"
या ऐसा ही कुछ के साथ शिकायत
params.b = d
के साथ समस्या यह (से जर्मन अनुवाद) है।
'डबल [एन] [एम]' डबल ** 'में क्षय नहीं हो सकता है, जबकि 'डबल [एन]' 'डबल *' में क्षय हो सकता है। यही कारण है कि पहला असाइनमेंट मान्य है, और बाद वाला नहीं है। – Zeta
यह भी देखें http://stackoverflow.com/a/13273979/560648 और http://stackoverflow.com/a/9557855/560648 और http://stackoverflow.com/a/7139014/560648 –
इसके अलावा, कभी भी " यह फिर से काम नहीं करता है! –