Kłopot ze zdefizniowaniem literału.

0

Mam problem z przeładowaniem operatora"". Ma ktoś pomysł co jest do poprawy w kodzie?

#include <iostream>

using namespace std;

class X;

X operator"" _w(int a)
{
    return X(a);
}
ostream& operator<< (ostream&, X&);

class X{
int m;

public:
    X(int mm=0):m(mm) {}

    friend X operator"" _w(int);
    friend ostream& operator<< (ostream&, X&);
};

ostream& operator<< (ostream& wejscie, X& x)
{
   wejscie<<x.m;
   return wejscie;
}

int main()
{
    cout<<997_w<<endl;

    return 0;
}
0

Przykład:

#include <iostream>
 
// used as conversion
constexpr long double operator"" _deg ( long double deg )
{
    return deg*3.141592/180;
}
 
// used with custom type
struct mytype
{
    mytype ( unsigned long long m):m(m){}
    unsigned long long m;
};
mytype operator"" _mytype ( unsigned long long n )
{
    return mytype(n);
}
 
// used for side-effects
void operator"" _print ( const char* str )
{
    std::cout << str;
}
 
int main(){
    double x = 90.0_deg;
    std::cout << std::fixed << x << '\n';
    mytype y = 123_mytype;
    std::cout << y.m << '\n';
    0x123ABC_print;
}
0

Kompilator wskazuje błędy w kodzie który wstawiłem, chodzi o złe argumenty w przeładowaniu operatora"".

0

A kompilator wspiera domyślnie standard C++11, czy czasami nie musisz przełączyć opcją? bo to dostępne jest dopiero w nowym standardzie.

0

Wspiera C++11

5

Operator "" nie może przyjmować argumentu typu int. Musisz wpisać tam unsigned long long int. (13.5.8.3 - tam masz listę możliwych typów argumentów)

1 użytkowników online, w tym zalogowanych: 0, gości: 1