C++ header/implementation 文件和重载运算符

C++ header/implementation file and overloaded operators

我很少使用 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;
}

有人可以帮我解决这个错误并解释 what/why 事情发出编译错误以及如何在功能中避免这个问题。感谢您的帮助!

将您的 header 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);
};

您在 header 中所做的实际上是 通过添加括号来定义 函数。

然后在源文件中做

bool EventComparison::operator() (Event *left, Event *right) {
     return left->time > right->time;
}

您在全局命名空间中定义了一个bool operator,但您想要做的是定义一个成员函数。 为此,您必须指定该函数属于哪个 class,您可以通过 EventComparison:: 部分来完成。

bool operator () (Event *left, Event *right){}

定义一个什么都不做的成员函数。这样的函数必须具有 return 类型 void,因为它没有 return 任何东西。

另一方面,您对运算符的定义并未表明它是 class 成员。

简而言之,您需要:

// 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;
}