首先,这是我关于stackoverflow的第一个问题。我正在努力完成一项家庭作业,但我不知道自己可能做错了什么。
当我尝试第二次运行一个函数时,我收到一个错误,“没有从'int'转换为'int(__ cdecl *)(float,float)'”。该函数应返回0,-1或+1,并在if / else语句中使用。
这是我所指的代码块......
#include <iostream>
using namespace std;
////this function returns a -1 if the left pan has a weight more than the right, a 0 if the weights of the two pans are equal, and a +1 if the right pan has a greater weight than the left
int weigh(float leftpan, float rightpan)
{
//compare the pan weights, return value
}
float findOddRock(float r1, float r2, float r3, float r4, float r5, float r6, float r7)
{
//first weigh
float first_leftpan = r1 + r2;
float first_rightpan = r3 + r4;
weigh(first_leftpan, first_rightpan);
if(weigh == 0){
cout << "this program is working so far";
float second_leftpan = r5; //this brings up an error for some reason
float second_rightpan = r6;
weigh(second_leftpan, second_rightpan);
//here's where I get the error, no conversion from 'int' to 'int (__cdecl *)(float,float)'
if(weigh == 0){ //be careful here, changed from second_weigh to weigh
float third_leftpan = r5;
float third_rightpan = r7;
weigh(third_leftpan, third_rightpan);
}
//
int main()
{
//find the light rock
findOddRock(2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 1.0);
}
答案 0 :(得分:3)
您希望将函数的返回值与0
进行比较:
weigh(first_leftpan, first_rightpan);
if(weigh == 0){
尝试做:
if(weigh(first_leftpan, first_rightpan) == 0){
函数weight
也没有返回任何内容。修复。
如果你试图将两个浮点数与==
进行比较,请注意浮点不准确性。
答案 1 :(得分:2)
上面的每个人都是正确的,但让我们来谈谈错误信息告诉你的内容。
正如您所知, weigh
是一个需要两个float
并返回int
的函数。
因此。调用weigh
时获得的值为int
。所以你的基本想法是正确的。
Hwever,当你写if(weigh == 0)
时,你遗漏了一个重要的部分,()
。这是C / C ++中用于调用函数的语法。 weigh
,然后只是函数的名称,它与“地址”相同。 C / C ++中函数的全名包含参数,因此函数的全名实际上是
_cdecl
int
(float, float)
并且符号weigh
是该函数的地址,出于复杂的原因,我想您还没有看到,将weigh
的完整类型转换为{ {1}}。
所以错误信息所说的是“整数比较应该在两个int(_cdecl*)(float,float)
之间,但你给我的是一个int
和一个带有两个浮点参数的函数的地址返回一个int
。我太傻了,无法理解。“
答案 2 :(得分:1)
问题在于:
if(weigh == 0)
您尝试将函数weigh
与零进行比较,而不是比较包含返回值的变量。
答案 3 :(得分:0)
这是怎么回事:
if(weigh == 0)
为什么要将函数与0进行比较?
我认为你真的应该做的是
if(0 == weigh( blah, blah ))
接下来解决您的逻辑问题
你正试图找到重量最轻的石头。 你应该使用的是排序。由于您不熟悉此C语言阅读this article
创建一个对float数组进行排序的函数。最低元素(或升序数组中的第一个元素)是奇怪的石头。
答案 4 :(得分:0)
if(称重== 0) 您试图将函数的地址(函数的名称作为左值)与零
进行比较称重== 0永远不会是真的,因为你定义了权重。
我相信这就是你想要的:
int result = weigh(first_leftpan,first_rightpan) if(result == 0)
答案 5 :(得分:0)
比较
(weigh == 0)
将函数指针与整数进行比较。错误显示在第二个实例而不是第一个实例上的原因是编译器的工件。我相当肯定,如果你注释掉给你错误的那一行,你会在第一行得到类似的错误。 (虽然有些编译器可能会隐式地将0转换为指针并允许比较...在这种情况下,您可能会因为错过右括号而看到错误?)
无论如何,看起来你想要比较调用的结果,在这种情况下你应该捕获返回值并在比较中使用它。
int ret = weigh(first_leftpan, first_rightpan);
if(ret == 0){
...