我一直收到这个错误...
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;
}
答案 0 :(得分:4)
您的函数GetElement
会引用float
并在那里写入值。但是,您使用i * 0.1
调用它,这是一个未命名的临时值,无法为参数float & Value
传递。想一想:在GetElement
内,您在Value
内写了一些内容,当i * 0.1
作为Value
传递时,这个数字应该在哪里结束?没有意义也无法奏效。你必须在这里传递一个正确类型的命名变量,所以函数可以写入一些东西。
答案 1 :(得分:2)
您的GetElement
修改了其第二个参数。当Value
为Value
时,您期望如何分配给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
)。