Не часто я работаю на C ++ и сталкиваюсь с простой ошибкой, которая меня сдерживает.
В Xcode у меня есть две ошибки: В Event.h: Control reaches end of non-void function
В Event.cpp: Overloaded operator must have at least one argument of class or enumeration
Обе ошибки находятся в строках сигнатуры метода для
bool operator () (Event *left, Event *right)
Вот файлы .h и .cpp целиком (пока не так много): Event.h
#ifndef __EventSimulation__EventComparison__
#define __EventSimulation__EventComparison__
#include <iostream>
#include "Event.h"
class EventComparison {
public:
bool operator () (Event *left, Event *right){}
};
#endif
Event.cpp
#include "EventComparison.h"
#include "Event.h"
bool operator() (Event *left, Event *right) {
return left->time > right->time;
}
Может ли кто-нибудь помочь мне исправить эту ошибку и объяснить, что / почему выдает ошибку компиляции и как избежать этого в функции. Спасибо за вашу помощь!
2 ответа
Измените заголовок Event.h на
class EventComparison {
public:
// the {} is the body of the function, therefore
// you added a function defintion, though you did
// not return a result
// bool operator () (Event *left, Event *right){}
// this is a function declaration:
// the body of the function is not defined
bool operator () (Event *left, Event *right);
};
В заголовке вы фактически определили функцию, добавив круглые скобки.
Затем в исходном файле сделайте
bool EventComparison::operator() (Event *left, Event *right) {
return left->time > right->time;
}
Вы определили bool operator
в глобальном пространстве имен, но вы хотели определить функцию-член. Для этого вам необходимо указать, к какому классу принадлежит функция, что вы можете сделать с помощью части EventComparison::
.
bool operator () (Event *left, Event *right){}
определяет функцию-член, которая ничего не делает. Такая функция должна иметь возвращаемый тип void, поскольку она ничего не возвращает.
С другой стороны, ваше определение оператора не указывает на то, что он является членом класса.
Короче, вам нужно:
// Declaration
class EventComparison {
public:
// NOTE: const
bool operator () const (Event *left, Event *right);
};
// Implementation
bool EventComparison::operator() const (Event *left, Event *right) {
return left->time > right->time;
}
Похожие вопросы
Связанные вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .