Victor
Victor

Reputation: 14632

C++ unknown errors

I have the following function in C++:

std::wstring decToDeg(double input)
{
    int deg, min;
    double sec, sec_all, min_all;
    std::wstring output;

    sec_all = input * 3600;
    sec = Math::Round(static_cast<int>(sec_all) % 60, 3); //code from @spin_eight answer
    min_all = (sec_all - sec) / 60;
    min = static_cast<int>(min_all) % 60;
    deg = static_cast<int>(min_all - min) / 60;
    output = deg + L"º " + min + L"' " + sec + L"\"";

    return output;
}

When I try to compile I get this error:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'System::String ^' (or there is no acceptable conversion)  

What can I do to correct these two errors in my function?

EDIT: solved

std::wstring decToDeg(double input)
{
    int deg, min;
    double sec, sec_all, min_all;

    sec_all = input * 3600;
    sec = Math::Round(static_cast<int>(sec_all) % 60, 3);
    min_all = (sec_all - sec) / 60;
    min = static_cast<int>(min_all) % 60;
    deg = static_cast<int>(min_all - min) / 60;

    std::wostringstream output;
    output << deg << L"º " << min << L"' " << sec << L"\"";

    return output.str();
}

Upvotes: 1

Views: 189

Answers (4)

You could use a string stream to construct output, like this:

std::wostringstream output;
output << deg << L"º " << min << L"' " << sec << L"\"";

return output.str();

Upvotes: 1

Strike
Strike

Reputation: 248

For the first error try this:

 min = (static_cast<int>(min_all) ) % 60;

This should make sure the cast will be completed first, before trying to do any other calculating.

If your other error is not an error that was caused by the first error, you may want to try using stringstream. It behaves like a normal I/O stream and is thus ideal for formatting strings.

Upvotes: 0

ISTB
ISTB

Reputation: 1827

You cannot use modulo on doubles. Modulo on doubles:

 int result = static_cast<int>( a / b );
 return a - static_cast<double>( result ) * b;

Upvotes: 1

spin_eight
spin_eight

Reputation: 4025

sec = Math::Round(static_cast<int>(sec_all) % 60, 3);

Upvotes: 1

Related Questions