Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ciao
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 28
#1

Не работает ссылка на функцию. - C++

27.04.2009, 12:32. Просмотров 892. Ответов 5
Метки нет (Все метки)

Пожалуйста,Помогите найти ошибку.Мне нужно сделать ссылку на функцию, которая является функцией класса interface. С этой ссылкой на функцию я должна работать в функциях класса newt.Проблемма в том, что у меня не получается сделать ссылку на функцию и ее челены. В итоге работаю с клоном на эту функцию и это очень не правельно.
//newt.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class newt
 
{
public:
  interface *func;
  interface *jacobian;
  sortie *print;
 
  void (interface::*nrfuncv)(int nn, std::vector <double> v, std::vector <double> f);
  void (interface::*jacobfunc)(std::vector <double> v, std::vector <double> f, std::vector < std::vector<double> > J);
 
  void (sortie::*on_subproduct)(std::vector <double> fvec);//Function of a conclusion of intermediate results
 
  newt() //Konstruktor
  {
//  on_subproduct = NULL;
  func = NULL;
  jacobian = NULL;
  print = NULL;
  }
//newt.cpp
C++
1
2
3
4
5
6
double newt::fmin(std::vector <double> x)
{
(func->*nrfuncv)(GetN(), x, fvec);//ССылка на функцию не работает. Вектор "fvec", заполяется нулями, хотя при первой ге итерации должен заполяться начальными значениями.
   for(int i=0 ; i < fvec.size() ; i++)
    {printf("%lf",fvec[i]);
}
//main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
newt nt;
matrice mat;
sortie so;
 
so.ouverture(fichiersortie); //открывает файл
 
int i=1;
        while(mat.produit[i]!=NULL)
         {
      nt.func=mat.produit[1]->frontiere[1]; 
      nt.nrfuncv= &interface::equilibre_Fe_Cr_C;//We transfer the reference to a class method interface
 
      nt.jacobian=mat.produit[1]->frontiere[1];
      nt.jacobfunc = &interface::Jacobian;//We transfer the reference to a class method interface
         i++;
         }
//        nt.on_subproduct = &sortie::ecriture; //Из-за этой строчки выдает segmentation fault
}
C++
1
2
void sortie::ecriture(std::vector <double> Y)
{....PRINTF..}
//phase.cpp
Сама функция с уравнениями, на которую идет ссылка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void interface::equilibre_Fe_Cr_C(int n, std::vector <double> Y, std::vector <double> F)
{
Y[0] = ph1->Thermo->y1[0]; //printf("%lf\n",Y[0]);
Y[1] = ph1->Thermo->y1[1]; //printf("%lf\n",Y[1]);
Y[2] = ph1->Thermo->y2[0]; //printf("%lf\n",Y[2]);
Y[3] = ph1->Thermo->y2[1]; //printf("%lf\n",Y[3]);
Y[4] = ph2->Thermo->y1[0]; //printf("%lf\n",Y[4]);
Y[5] = ph2->Thermo->y1[1]; //printf("%lf\n",Y[5]);
Y[6] = ph2->Thermo->y2[0]; //printf("%lf\n",Y[6]);
Y[7] = ph2->Thermo->y2[1]; //printf("%lf\n",Y[7]);
Y[8] = X_nf;  //printf("%lf\n",Y[8]);
//printf("%lf\n",X_C);
//printf("%lf\n",X_Cr);
 
 F[0] = ph1->Thermo->pot_chemical1[0] - ph2->Thermo->pot_chemical1[0];// printf("%lf\n",F[0]);
 F[1] = ph1->Thermo->pot_chemical1[1] - ph2->Thermo->pot_chemical1[1];// printf("%lf\n",F[1]);
 F[2] = ph1->Thermo->pot_chemical2[0] - ph2->Thermo->pot_chemical2[0];//printf("%lf\n",F[2]);
 F[3] = Y[0] + Y[1] - 1; //printf("%i\n",F[3]);
 F[4] = Y[4] + Y[5] - 1; //printf("%i\n",F[4]);
 F[5] = Y[2] + Y[3] - 1; //printf("%i\n",F[5]);
 F[6] = Y[6] + Y[7] - 1; //printf("%i\n",F[6]);
 F[7] = (ph1->Thermo->m[0] * Y[1])/(ph1->Thermo->m[0] + ph1->Thermo->m[1]) * Y[8] + (ph2->Thermo->m[0] * Y[5])/(ph2->Thermo->m[0] + ph2->Thermo->m[1]) * (1 - Y[8]) - X_Cr; //printf("%lf\n",F[7]);
 F[8] = (ph1->Thermo->m[1] * Y[2])/(ph1->Thermo->m[0] + ph1->Thermo->m[1]) * Y[8]  + (ph2->Thermo->m[1] * Y[6])/(ph2->Thermo->m[0] + ph2->Thermo->m[1]) * (1 - Y[8]) - X_C; //printf("%lf\n",F[8]);
 
for (int i = 0; i < F.size(); i++){
 printf("%lf\n",F[i]);} //Здесь вектор распечатывается нормально.
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2009, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает ссылка на функцию. (C++):

Инкапсуляция, ссылка на функцию - C++
Делаю задание по инкапсуляции, реализовать 3 вида списков в 1 программе, причем списки как подкл модули и снаружи только выбор типа при...

Ссылка на функцию класса (не указатель) - C++
можно ли делать ссылки на функции класса? например класс: class cdPolygon2D : public draw { public: ...

Thread ссылка на удаленную функцию о_О - C++
Добрый день Начал росбираться с потоками на C++ и после 5 минут наткнулся на проблемку. Имеею клас Writing_Class ничего...

Что передаётся в функцию, если в прототипе ссылка? - C++
void swap(int &amp;, int &amp;); int main() { /* ... */ swap(x,y); /* ... */ } void swap(int &amp;rx, int...

Не работает ссылка на структуру - C++
Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; ...

Как работает ссылка с объектами, классами и перегруженным оператором [] - C++
Я тут решил поиграться с кодом и понял что совершенно не догоняю как работает ссылка &amp; Есть код нормально работающий: #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
27.04.2009, 12:37 #2
На std::mem_fun_ref смотрел?
ciao
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 28
27.04.2009, 12:42  [ТС] #3
А чем это Вы. Нет, не смотрела. Вообще, куда смотреть?
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
27.04.2009, 12:51 #4
Смотреть? Разумеется, в MSDN: например, тут - http://msdn.microsoft.com/en-us/library/741a5f2d.aspx
Вообще, в любую толковую доку по стандартной библиотеке C++.
ciao
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 28
27.04.2009, 12:58  [ТС] #5
Сейчас посмотрю. Спасибо. Но, я считаю, что модель в принципе рабочая и буду очень признательна, кто увидет ошибку
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
27.04.2009, 14:52 #6
Ссылка на функцию не при чем. Вы передаете вектор в функцию по значению, вполне естественно, что никакие результаты не сохраняются. Поставьте, например,
C++
1
void interface::equilibre_Fe_Cr_C(int n, std::vector <double> &Y, std::vector <double> &F)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2009, 14:52
Привет! Вот еще темы с ответами:

Ссылка на функцию - Objective-C
Здравствуйте уважаемые Форумчане! Пожалуйста подскажите начинающему Objective c разработчику, возможно ли реализация ссылки на функцию в...

1C 8.3 +DynamicWrapperX + ссылка на функцию - 1С
Всем доброго времени суток. Подвернулась задача написать внешнюю обработку для 1С. Заключается она в работе с устройством (считыватель...

Ссылка на выбранную функцию - Visual C++
Добрый день. Помогите пожалуста с решение проблемы, есть функция int function(int x) расчитывает значение от аргумента x но вот...

Ссылка на void функцию контрола - C++ Builder
В проекте использую сторонние компоненты InstrumentLab, это стрелочные и цифровые индикаторы. у компонентов есть поле Value для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2009, 14:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru