类c ++中的浮点数和双重错误

时间:2014-04-15 20:02:59

标签: c++ class

我一直收到这个错误...

lab11a.cpp: In function ‘int main()’:
lab11a.cpp:120:34: error: no matching function for call to ‘SafeArray::GetElement(int&, double)’
lab11a.cpp:120:34: note: candidate is:
lab11a.cpp:48:6: note: bool SafeArray::GetElement(int, float&) const
lab11a.cpp:48:6: note:   no known conversion for argument 2 from ‘double’ to ‘float&’
lab11a.cpp:121:38: error: no matching function for call to ‘SafeArray::GetElement(int&, double)’
lab11a.cpp:121:38: note: candidate is:
lab11a.cpp:48:6: note: bool SafeArray::GetElement(int, float&) const
lab11a.cpp:48:6: note:   no known conversion for argument 2 from ‘double’ to ‘float&’

这是我在这个方法界面中的代码:

bool GetElement(const int i, float & Value) const;

这是我实施中的代码:

bool SafeArray::GetElement(const int i, float & Value) const 
{
    bool Success = false;
    if ((i >= 0) && (i < SIZE))
    {
        Success = true;
        Value = Array[i];
    }
    return Success;
}

这是我主程序中的代码:

for (int i = -5; i < 24; i++)
{
    data1.GetElement(i, i * 0.1);
    if (data1.GetElement(i, i * 0.1) == true)
        cout << "get " << i << " " << i * 0.1 << endl;
}

3 个答案:

答案 0 :(得分:4)

您的函数GetElement会引用float并在那里写入值。但是,您使用i * 0.1调用它,这是一个未命名的临时值,无法为参数float & Value传递。想一想:在GetElement内,您在Value内写了一些内容,当i * 0.1作为Value传递时,这个数字应该在哪里结束?没有意义也无法奏效。你必须在这里传递一个正确类型的命名变量,所以函数可以写入一些东西。

答案 1 :(得分:2)

您的GetElement修改了其第二个参数。当ValueValue时,您期望如何分配给i * 0.1

你可以制作参数float const &,但是你无法在函数中修改它。

我认为你需要考虑你实际上要做的事情。

答案 2 :(得分:2)

您希望主循环看起来像这样:

for (int i = -5; i < 24; i++)
{
    float f;
    if (data1.GetElement(i, f) == true)
        cout << "get " << i << " " << f << endl;
}

通过这种方式,您可以通过f方法引用GetElement。您可以获取f的地址(&符号的地址),但您无法获取临时地址(i*0.1)。