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