Sau khi tạo lớp sau, quá trình biên dịch không thành công với nhiều lỗi "biểu tượng trùng lặp". Các lỗi thực tế không phải là rất mô tả:Tại sao điều này không đánh dấu quá tải nhà điều hành là nội tuyến gây ra lỗi định nghĩa trùng lặp?
"biểu tượng trùng lặp __Zeq .... trong: /Users/myusername/Library/Developer/Xcode/DerivedData/MyProject-asdfasfasdf..../Build/Intermediates/ MyProject.build/Debug-iphonesimulator/MyTarget.build/Objects-normal/i386/MyClass.o "
thông điệp tương tự ở trên xuất hiện trong nhiều lớp khác nhau, và xuất hiện ở phần cuối của biên soạn, vì vậy tôi don Không biết vấn đề là gì.
Tôi đã kiểm tra như sau:
- Lớp học sử dụng này, bao gồm các tập tin Listening.hpp.
- Định nghĩa duy nhất cho lớp này, có trong tệp này.
Sự cố có thể là gì?
#ifndef Listening_hpp
#define Listening_hpp
#include <stdio.h>
#include "EAction.hpp"
class Listening{
private:
int _emitterId;
int _listenerId;
std::string _eventName;
EAction* _actionToTake; //not owned.
protected:
public:
Listening(int emitterId,int listenerId,std::string eventName,EAction* actionToTake) : _emitterId(emitterId),_listenerId(listenerId),_eventName(eventName){
_actionToTake = actionToTake;
}
int getEmitterId()const{
return _emitterId;
}
int getListenerId()const{
return _listenerId;
}
std::string getEventName()const{
return _eventName;
}
EAction* getAction()const{
return _actionToTake;
}
};
bool operator==(const Listening &first,const Listening &other)
{
bool result = false;
if(first.getEmitterId() == other.getEmitterId()){
if(first.getListenerId() == other.getListenerId()){
if(first.getEventName() == other.getEventName()){
if (first.getAction() == other.getAction()) {
result = true;
}
}
}
}
return result;
}
bool operator!=(const Listening &first,const Listening &other)
{
bool result = !(first == other);
return result;
}
#endif /* Listening_hpp */
EAction.hpp
#ifndef EAction_hpp
#define EAction_hpp
#include <stdio.h>
class EAction{
private:
protected:
public:
virtual std::vector<std::size_t> seedList() = 0;
};
#endif /* EAction_hpp */
EDIT: Chỉnh sửa tiêu đề - Tôi nghĩ rằng điều này có thể giúp những người có một lỗi định nghĩa trùng lặp vì những lý do khác bỏ qua câu trả lời này.
Vì bạn đã xác định toán tử 'operator ==' và '! =' Trong tệp tiêu đề! – Brian
Nhận xét trước khi anh chàng Hy Lạp đánh dấu điều này là trùng lặp chính xác của một megathread –
@Brian Bạn có thể giải thích tại sao đó là một vấn đề? Tôi mới đến với C++, nhưng có kinh nghiệm với các ngôn ngữ lập trình khác, vì vậy không biết những điều cơ bản này ... –