Функция друга не объявлена ​​в этой области видимости ошибки

Привет, я пытаюсь понять сферу функций друга, и я получаю сообщение об ошибке «не объявлено в области». Вот мой код:

//node.h
class Node{

public:

int id;
int a;
int b;

friend int add(int,int);

void itsMyLife(int);
Node();
};

//node.cpp
Node::Node(){
a=0;
b=0;
id=1;
}

void Node::itsMyLife(int x){

cout<<"In object "<<id<<" add gives "<<add(x,a)<<endl;

}

//routing.cpp
#include "node.h"
int add(int x, int y){

return x+y;
}

//main.cpp
#include "node.h"
int main(){

return 0;
}

Я получаю ошибку «добавить не объявлено в этой области» в node.cpp. Почему я получаю эту ошибку, когда я объявил функцию в области видимости класса? Любая помощь будет оценена. Спасибо

0

Решение

Внутри вашего класса узла вы объявляете функцию-друга int add (int, int). Тем не менее, в настоящее время компилятор еще не сталкивался с функцией, и поэтому он неизвестен.

Вы можете сделать отдельный заголовок и исходный файл для вашей функции добавления. Затем в node.h включите новый заголовок. Потому что в файле, где вы объявляете Node, функция add в настоящее время неизвестна.

Например, вы можете создать файл add.h и файл add.cpp и включить add.h перед объявлением Node. Не забудьте также скомпилировать add.cpp.

2

Другие решения

Вы на самом деле не объявили функцию.

extern int add(int, int);
0

Это ошибка на стороне Linux. Код должен работать. Сейчас у меня есть код, который прекрасно компилируется на стороне Windows, и когда я перемещаю его на сторону Linux, я получаю ту же ошибку. Очевидно, компилятор, который вы используете на стороне Linux, не видит / не использует объявление друга в заголовочном файле и, следовательно, выдает эту ошибку.
Простое перемещение реализации функции-друга в файл C ++ ПЕРЕД использованием этой функции (например, как это может быть использовано при назначении функции обратного вызова), это решило мою проблему и также должно решить вашу.

С уважением

0
По вопросам рекламы [email protected]