Я использую связанный список для реализации заданного класса. Чтобы скрыть мой узел узла от пользователей, я поместил объявление узла структуры в личное. Кроме того, я перегрузил оператор +, что означает операцию объединения между двумя наборами. Поскольку я хочу реализовать его путем рекурсии, я перегрузил оператор + в частном поле под названием unionMerge. Однако это вызвало ошибку "ошибка:" unionMerge не был объявлен в этой области ", но я поместил объявление unionMerge выше operator+ в файл Set.cpp. Может ли кто-нибудь помочь мне?
Set.h - файл интерфейса. Set.cpp - это реализация интерфейса.
Вот файл интерфейса Set.h:
#ifndef SET_H
#define SET_H
#include <iostream>
using namespace std;
class Set{
public:
Set();
friend const Set operator+(const Set& a, const Set& b);
private:
struct Node{ //private Node
int value;
Node* next;
};
Set(Node *p); //private constructor
Node* list;
//overload the public operator+ above
static Node* unionMerge(const Node* p, const Node *q);
};
#endif
Вот файл реализации, Set.cpp:
#include <iostream>
#include "Set.h"
Set::Set():list(nullptr){
}
Set::Set(Node* p){
list = p;
}
Set::Node* Set::unionMerge(const Node *p, const Node *q){
// to debug, I return nullptr
return nullptr;
}
const Set operator+(const Set& a, const Set& b){
//error: ‘unionMerge was not declared in this scope
return Set(unionMerge(a.list,b.list));
Set::Node *p = unionMerge(a.list,b.list);
Set s;
s.list = p;
return s;
}
operator+()
не входит в Set
(друзья не являются членами), поэтому, если вы хотите получить доступ к статическому члену Set
вы должны его квалифицировать:
return Set(Set::unionMerge(a.list,b.list));
operator+()
не является членом, но может получить доступ кSet::unionMerge()
. Если вызывающая функция не является функцией-членом, то нам нужно указать имя класса для функции-члена? - Да.