Я думаю, что ваша проблема на самом деле в:
void test_cd(char * c0, double * d0);
и что ваш аргумент должен быть double
, а не double*
.
В отношении вашегоcomment
Ваш код:
E.test_cc("Hello","World");
E.test_cd("Hello",42);
Ваши прототипы:
void test_cc(char * c0, char * c1);
void test_cd(char * c0, double d0);
«Hello» и «World» - это строковые литералы, которые затухают при вводеconst char *.Итак, они указатели.Когда вы передаете c0 и c1 в test_cc, это нормально, потому что он ожидает указатель.
, в то время как c0 - указатель в test_cd, d0 - нет - d0 имеет тип double, НЕ указатель на удвоение.Таким образом, вместо этого вы должны передать указатель на двойное число.
Это можно сделать, создав двойное значение в стеке и передав его адрес:
double hi_mom = 83.2;
test_cd("some string" &hi_mom);
или объявивуказатель и указатель на переменную стека, передавая это в:
double hi_mom = 83.2;
double* ptr = &hi_mom;
test_cd("some string", ptr);
или объявляя указатель, указывающий на динамическую память, и передавая его в:
double* ptr = new double(83.2);
test_cd("some string", ptr);
delete ptr;
Хотя я быпо возможности избегайте 3-го.
Редактируйте снова ...
http://www.dalkescientific.com/writings/NBN/c_extensions.html
показывает рабочий пример того, как вызывать код Cот питона включая прохождение дубля.Ищите iterate_point в коде Python и C, чтобы увидеть, как он работает.У вас не должно быть указателя на двойное число, оно должно быть обычным двойным, как было сказано ранее.