Error C3867 'Class::pervaia': non-standard syntax; use '&' to create a pointer to member Не могу понять место, куда я должна поставить & Я понимаю ,что в строчке
otv = func(pervaia, a);
функция pervaia должна иметь передаваемое значение в (), когда у меня была написана эта же программа, но не разделенная на классы, то все работало. Буду очень благодарна за помощь.
1.сpp
#include "stdafx.h"
#include "Class.h"
#include <iostream>
using namespace std;
class MyClass : public Class {
public:
double pervaia(double x)
{
return pow(x, 4) + pow(x, 3);
}
};
int main()
{
double a, b;
MyClass l;
cout << "Input the interval: " << '\n';
cout << "a=";
cin >> a;
cout << "b=";
cin >> b;
cout << '\n';
cout << "MIN: " << l.neww(a, b) << endl;
system("pause");
return 0;
}
Class.cpp
#include "stdafx.h"
#include <iostream>
#include "Class.h"
using namespace std;
double Class::func(ykaz y, double x)
{
double deltaX = 0.0000001;
return (((this->*y)(x + deltaX) - (this->*y)(x)) / deltaX);
}
double Class::neww(double a, double b) {
double deltaX = 0.0000001;
double otv, min, otvv, otvvv, x, aa, c;
otv = func(pervaia, a);
otvv = func(pervaia, a + deltaX);
otvvv = (otvv - otv) / deltaX;
min = otvvv;
aa = a;
for (int i = 0; i <= b - a; i++)
{
x = aa;
cout << "x=" << x << '\t';
otv = func(pervaia, x);
otvv = func(pervaia, x + deltaX);
otvvv = (otvv - otv) / deltaX;
cout << otvvv << endl;
if (min > otvvv)
{
min = otvvv;
}
aa++;
}
return min;
}
Class.h
#ifndef Class_h
#define Class_h
class Class
{
public:
typedef double(Class::*ykaz)(double);
double func(ykaz y, double);
double neww(double a, double b);
virtual double pervaia(double x)=0;
};
#endif
Вызывайте вот так
otv = func(&Class::pervaia, a);
Вы определили указатель на функцию член класса прямо в классе
typedef double(Class::*ykaz)(double);
и функцию
double func(ykaz y, double);
т.е. в аргументе функции должен быть не указатель на функцию, а указатель на функцию-член
а потом вызываете
func(pervaia, a);
компилятор не видит ожидаемый указатель на функцию-член, потому что вы передаете просто указатель на функцию pervaia
или вызывайте так
func(&Class::pervaia, a); (зависит от вашего кода, будет ли это правильно)
или же перепешите в классе обявление
class Class
{
public:
typedef double (*ykaz)(double);
...
};
чтоб ykaz
был типом указателья на функцию, а не указателем на функцию-член
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть две Arduino Mega 2560, соединенные между собой через TX и RXКо второй Arduino нет доступа по USB, только через первую Arduino
// Массив должен выводится с допстолбцом в начале и после этого выдавать запрос на продолжение работы в программе или выход
Был код, калькулятор римских и арабских чиселНужно его преобразовать, чтобы был в 3 файла main