如何对对象数组进行排序

时间:2016-02-03 06:51:27

标签: c++ sorting oop

我已经创建了一个名为Box的类,它几乎就像听起来一样。我想对这些盒子对象进行排序,并且我已经创建了一个这样做的函数。

void boxSort(Box array[], int size) {
    Box temp;
    bool swap;

    do {
        swap = false;
        for(int count=0; count<(size-1); count++) {
            int volume1 = array[count].getVolume(array[count].height, array[count].width, array[count].length);
            int volume2 = array[count+1].getVolume(array[count+1].height, array[count+1].width, array[count+1].length);
            if(volume1 > volume2) {
                temp = array[count];
                array[count] = array[count+1];
                array[count+1] = temp;
                swap = true;
            }
        }
    }
    while(swap);
}

此函数对类Box的对象数组进行排序。

Box上课:

class Box {
    public:
        double height, width, length;
        double getVolume(double, double, double);
        double getSurfaceArea(double, double, double);
        void setHeight(double);
        void setWidth(double);
        void setLength(double);

        Box() {
            height = width = length = 1;
        }
        Box(double h, double w, double l) {
            setHeight(h);
            setWidth(w);
            setLength(l);
        }
};

#endif

void Box::setHeight(double h) {
    height = h;
}

void Box::setWidth(double w) {
    width = w;
}

void Box::setLength(double l) {
    length = l;
}
double Box::getVolume(double h, double w, double l) {
    double volume = h*w*l;

    return volume;
}
double Box::getSurfaceArea(double h, double w, double l) {
    double surfaceArea = (h*w)*2 + (h*l)*2 + (l*w)*2;

    return surfaceArea;
}

当我运行此程序时,我收到错误:

  

链接器命令失败,退出代码为1

这并没有显示在任何特定的行上,我不知道它意味着什么,所以我对如何调试它有点迷失。

3 个答案:

答案 0 :(得分:0)

如果链接的库或目标文件有任何问题,则会报告链接器错误。您是否能够成功构建可执行文件?

答案 1 :(得分:0)

我认为由于代码中有多个main()函数而发生此错误。您只能有一个main()函数。

答案 2 :(得分:0)

不确定错误。但我建议将boxSort函数更改为类似的内容。

getVolume更改为此

double Box::getVolume() {
    return height*width*length;
}

和boxSort到此

void boxSort(std::array<Box, 3> boxes)
{
        struct
        {
                bool operator()(Box x, Box y)
                {
                        return  x.getVolume() < y.getVolume();
                }
        }compFunc;

        std::sort(boxes.begin(), boxes.end(), compFunc);

        for(Box a: boxes)
        {
                std::cout<<a.getVolume()<<" ";
        }

}

函数调用:

std::array<Box,3> boxes = {box1, box2, box3};
boxSort(boxes);