5 Stimmen

std::binary_function - keine Übereinstimmung für call?

Einschließen.

#include <functional>

using namespace std;

int main() {
  binary_function<double, double, double> operations[] = {
    plus<double>(), minus<double>(), multiplies<double>(), divides<double>() 
  };
  double a, b;
  int choice;
  cout << "Enter two numbers" << endl;
  cin >> a >> b;
  cout << "Enter opcode: 0-Add 1-Subtract 2-Multiply 3-Divide" << endl;
  cin >> choice;
  cout << operations[choice](a, b) << endl;
}

und ich erhalte folgende Fehlermeldung:

Calcy.cpp: In function ‘int main()’:
Calcy.cpp:17: error: no match for call to ‘(std::binary_function<double, double, double>) (double&, double&)’

Kann mir jemand erklären, warum ich diesen Fehler erhalte und wie ich ihn loswerde?

7voto

UncleBens Punkte 39755

std::binary_function enthält nur Typendefinitionen für Argument- und Rückgabetypen. Sie war nie dazu gedacht, als polymorphe Basisklasse zu fungieren (und selbst wenn sie es wäre, hätte man immer noch Probleme mit Slicing).

Als Alternative können Sie Folgendes verwenden boost::function (o std::tr1::function ) wie folgt:

boost::function<double(double, double)> operations[] = {
  plus<double>(), minus<double>(), multiplies<double>(), divides<double>() 
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X