Привет, я пытаюсь понять сферу функций друга, и я получаю сообщение об ошибке «не объявлено в области». Вот мой код:
//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. Почему я получаю эту ошибку, когда я объявил функцию в области видимости класса? Любая помощь будет оценена. Спасибо
Внутри вашего класса узла вы объявляете функцию-друга int add (int, int). Тем не менее, в настоящее время компилятор еще не сталкивался с функцией, и поэтому он неизвестен.
Вы можете сделать отдельный заголовок и исходный файл для вашей функции добавления. Затем в node.h включите новый заголовок. Потому что в файле, где вы объявляете Node, функция add в настоящее время неизвестна.
Например, вы можете создать файл add.h и файл add.cpp и включить add.h перед объявлением Node. Не забудьте также скомпилировать add.cpp.
Вы на самом деле не объявили функцию.
extern int add(int, int);
Это ошибка на стороне Linux. Код должен работать. Сейчас у меня есть код, который прекрасно компилируется на стороне Windows, и когда я перемещаю его на сторону Linux, я получаю ту же ошибку. Очевидно, компилятор, который вы используете на стороне Linux, не видит / не использует объявление друга в заголовочном файле и, следовательно, выдает эту ошибку.
Простое перемещение реализации функции-друга в файл C ++ ПЕРЕД использованием этой функции (например, как это может быть использовано при назначении функции обратного вызова), это решило мою проблему и также должно решить вашу.
С уважением