未定义的引用`computeArea(int,int,int)'

时间:2015-05-15 18:02:49

标签: c++ overloading

我正在尝试测试计算多边形区域的公式。但是,我似乎无法编译。

#include <iostream>

using namespace std;

int main (int argc, char** argv)
{
    int xvalue[12];
    int yvalue[12]; 

    int X = 0;
    int Y = 0;

    double area = 0.0;

    double computeArea(int *, int *, int);

    for (int i=0; i<12; i++)
    {
            cout << "\nPlease enter x-ordinate of pt " << i+1 << ": "; 
            cin >> X;
            xvalue[i] = X;

            cout << "Please enter y-ordinate of pt " << i+1 << ": ";
            cin >> Y;
            yvalue[i] = Y;
    }

    /*for (int i=0; i<12; i++)
    {
        computeArea(xvalue[i], yvalue[i], 12);
    }*/

    area = computeArea(xvalue, yvalue, 12);

    cout << "Your area is: " << area << endl;

}

double computeArea(int *X, int *Y, int points)
{   
    double area;
    int i;
    int j=points-1;

    for (i=0; i<points; i++) 
    {
        area+=(X[j]+X[i])*(Y[j]-Y[i]);
        j=i; 
    }

    return area*.5;

}

由于R Sahu,脚本现在编译,所以我输入了12个坐标,它们是:

15, 3
15, 5
13, 5
13, 7
15, 7
15, 9
17, 9
17, 7
19, 7
19, 5
17, 5
17, 3

但结果显示为240,这是错误的,应该是20

2 个答案:

答案 0 :(得分:1)

声明和定义不匹配。

double computeArea(int, int, int);

double computeArea(int *X, int *Y, int points)

将声明更改为:

double computeArea(int *, int *, int);

改变你的召唤方式。而不是

for (int i=0; i<12; i++)
{
    computeArea(xvalue[i], yvalue[i], 12);
}

使用

double area = computeArea(xvalue, yvalue, 12);

要打印该区域,而不是

cout << "Your area is: " << computeArea() << endl;

使用

cout << "Your area is: " << area << endl;

修改

您尚未将area初始化为0。这需要修复。

您用于计算面积的公式不正确。它需要

    area += (X[j]*Y[i] - X[i]*Y[j]);

请参阅http://mathworld.wolfram.com/PolygonArea.html

答案 1 :(得分:0)

这就是你调用函数的方法:

    cout << "Your area is: " << computeArea() << endl;

这就是你的函数原型:

double computeArea(int *X, int *Y, int points)

正如您所看到的,它需要3个参数,而您没有通过任何参数。

再次,另一个原型:

    double computeArea(int, int, int);

第一个使用指针,第二个使用普通的int。

因此警告。