Функция C ++ List Unique () - PullRequest
       13

Функция C ++ List Unique ()

0 голосов
/ 24 ноября 2011

Следующие ошибки всегда указывали на мой список.

В моем файле класса

Point3D operator==(const Point3D &p1) const;

В моем .cpp файле

bool operator==(Point3D &p1, Point3D &p2)
{
    if ( p1.getX() == p2.getX() && p1.getY() == p2.getY() && p1.getZ() == p2.getZ() )
        return true;
    else
        return false;
}

В моем основном файле

//declaration
list<Point3D> l_3D;

l_3D.unique(); <-- the error point to this 

Сообщение об ошибке

..... In member function 'void std::list<_Tp,_Alloc>::unique() [with_Tp = Point3D,_Alloc = std:: allocator<Point3D>]:

Instantiated from here

error: could not convert 'Point3D::operator==(const Point3D&) const (((const Point3D&)((const Point3D*)__next. std::_List_iterator<_Tp>::operator*[with_Tp = Point3D]())))' to 'bool'

Добрым душам, я заранее благодарен.

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

В вашей декларации вы возвращаете Point3D, которое должно быть bool:

Point3D operator==(const Point3D &p1) const;
^^^^^^^
should be bool

Вышеприведенное выглядит так, как будто вы объявляете оператор как функцию-член, можете поспорить, что вы реализуете его как свободную функцию Вы должны решить, что это такое. Если вы используете функцию-член, измените реализацию на:

bool Point3D::operator==(const Point3D &p2) const
{
    if ( getX() == p2.getX() && getY() == p2.getY() && getZ() == p2.getZ() )
        return true;
    else
        return false;
}

Или даже лучше (согласно комментарию @ibids):

bool Point3D::operator==(const Point3D &p2) const
{
    return (getX() == p2.getX() && getY() == p2.getY() && getZ() == p2.getZ());
}

Как правило, подпись вашего определения должна соответствовать подписи вашей декларации.

1 голос
/ 24 ноября 2011

Изменение:

bool operator==(Point3D &p1, Point3D &p2)
{
    if ( p1.getX() == p2.getX() && p1.getY() == p2.getY() && p1.getZ() == p2.getZ() )
        return true;
    else
        return false;
}

На это:

bool operator==(const Point3D &p1, const Point3D &p2)
{
    if ( p1.getX() == p2.getX() && p1.getY() == p2.getY() && p1.getZ() == p2.getZ() )
        return true;
    else
        return false;
}
0 голосов
/ 24 ноября 2011

В вашем файле класса (я полагаю, вы имеете в виду заголовочный файл), вы объявляете operator== как возвращающее Point3D, когда оно должно возвращать bool.Кроме того, ваш operator== имеет разное количество аргументов в вашем файле класса (header?) И вашем файле cpp.

...