Kompilator wyrzuca błąd i robi to słusznie. Spójrz jeszcze raz na swoje funkcje: double operator+(Value &) oraz a+b+x. a+b ewaluuje się do double i tego double chcesz dodać do x. Ale nie masz przeciążonego operatora double operator+(double &) więc błąd
Po takiej modyfikacji będzie możliwe to co napisałem w main
#include <iostream>
#include <string>
class Value
{
private:
double przychody;
double wydatki;
double suma;
public:
Value(double p= 0.0, double w = 0.0){przychody = p, wydatki = w; suma = p-w;}
double operator+(Value & other)
{
double s = suma + other.suma;
return s;
}
double operator+(double other)
{
double s = this->suma + other;
return s;
}
};
using namespace std;
int main()
{
Value a(11.0, 2);
Value x(11.0, 2);
Value b(11.4,8.6);
double d;
d = x + (a + b);
cout << d;
return 0;
}
Zauważ, że użyłem nawiasowania dlatego ponieważ operator + będzie szukał operatora dodawania typów Value + double. Jak zrobiłbym na odwrót albo bez nawiasów to będziesz miał poszukiwanie operatora dodawania dla typu double: double + Value. By pisać po prostu a+b+x AFAIK musisz zdefiniować operator niezależny od klasy w postaci jakiejś zewnętrznej funkcji, który łapie z lewej double a z prawej Value ale być może da się to ładniej zrobić.