1

我在 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;
}

当我尝试编译时,出现此错误:

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

我可以做些什么来纠正我的函数中的这两个错误?

编辑:解决了

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();
}
4

4 回答 4

1
sec = Math::Round(static_cast<int>(sec_all) % 60, 3);
于 2012-11-22T07:42:32.063 回答
1

你不能在双打上使用模数。双打取模:

 int result = static_cast<int>( a / b );
 return a - static_cast<double>( result ) * b;
于 2012-11-22T07:44:56.583 回答
1

您可以使用字符串流来构造output,如下所示:

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

return output.str();
于 2012-11-22T07:48:21.873 回答
0

对于第一个错误,试试这个:

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

这应该确保在尝试进行任何其他计算之前先完成演员表。

如果您的其他错误不是由第一个错误引起的错误,您可能需要尝试使用stringstream。它的行为类似于普通的 I/O 流,因此非常适合格式化字符串。

于 2012-11-22T07:45:27.427 回答