Друзья не отображаются как общедоступные в C

#c #class #private #public

#c #класс #Частное #общедоступные

Вопрос:

Я написал класс с другом, объявленным в разделе public:

 class Graph {
    // ... snip ...

public:
    Graph()= default;
    friend Graph operator  (const Graph amp;&1, const Graph amp;&2);
};
  

Но когда я пишу следующее в main.cpp:

 Graph &{};
&.
  

моя среда разработки не отображается operator как возможное завершение.

В конце концов, operator это не общедоступно? Что происходит?

Комментарии:

1. почему понижающий голос?

2. Я полагаю, из-за почти полного отсутствия деталей.

3. Ваша проблема невоспроизводима. Сформулируйте вопрос правильно. Например. какое всплывающее окно? В C нет всплывающих окон.

4. Вы, по крайней мере, опубликовали класс с тех пор, как я сделал приведенный выше комментарий. Теперь вы могли бы добавить, какую IDE вы используете.

5. Я думаю, что здесь скрыт законный вопрос C — он сформулирован только в терминах неназванной IDE

Ответ №1:

&. это позволило бы вашей IDE отображать Graph функции-члены.

Это бесплатная функция (не являющаяся членом):

 friend Graph operator  (const Graph amp;&1, const Graph amp;&2);
  

Если вы добавите функцию-член, как operator = показано ниже, это, возможно, отобразится:

 class Graph {
private:
    // ... snip ...

public:
    Graph() = default;
    Graphamp; operator =(const Graphamp; rhs);                      // this may show up
    friend Graph operator (const Graph amp;&1, const Graph amp;&2);
};

Graphamp; Graph::operator =(const Graphamp; rhs) {
   // ... impl ...
   return *this;
}

Graph operator (const Graph amp;&1, const Graph amp;&2) {
    Graph retval(&1);
    return retval  = &2;
}
  

Примечание: При использовании функции-члена operator = изнутри operator , как указано выше, свободной функции больше не нужно будет быть friend .