Доступ к статической функции-члену из функции друга

0

Я использую связанный список для реализации заданного класса. Чтобы скрыть мой узел узла от пользователей, я поместил объявление узла структуры в личное. Кроме того, я перегрузил оператор +, что означает операцию объединения между двумя наборами. Поскольку я хочу реализовать его путем рекурсии, я перегрузил оператор + в частном поле под названием 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-overloading
friend

1 ответ

3
Лучший ответ

operator+() не входит в Set (друзья не являются членами), поэтому, если вы хотите получить доступ к статическому члену Set вы должны его квалифицировать:

 return Set(Set::unionMerge(a.list,b.list));
  • 0
    Вы имеете в виду, что к функции-члену должна обращаться функция-член? Если вызывающая функция не является функцией-членом, то нам нужно указать имя класса для функции-члена?
  • 0
    @Fan Вы имеете в виду, что функция-член должна быть доступна через функцию-член? - Нет, operator+() не является членом, но может получить доступ к Set::unionMerge() . Если вызывающая функция не является функцией-членом, то нам нужно указать имя класса для функции-члена? - Да.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню