您好我正在尝试了解友元函数的范围,并且我得到了“未在范围内声明”错误。这是我的代码:
//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 :(得分:2)
在您的节点类中,您声明了一个友元函数int add(int,int)。但是,目前编译器还没有遇到该函数,因此它是未知的。
您可以为添加功能创建单独的标头和源文件。然后在node.h中包含你的新标题。因为在声明Node的文件中,当前不知道函数add。
因此,您可以创建add.h和add.cpp文件,并在声明Node之前包含add.h。别忘了编译add.cpp。
答案 1 :(得分:0)
你实际上没有宣布这个功能。
extern int add(int, int);
答案 2 :(得分:0)
它是Linux方面的一个错误。代码应该工作。我现在有代码在Windows端编译很好,当我将它移动到Linux端时,我得到相同的错误。显然,你在Linux端使用的编译器没有在头文件中看到/使用friend声明,因此给出了这个错误。 通过在函数的用法之前简单地移动友元函数的C ++文件中的实现(例如:可能在函数回调赋值中使用),这解决了我的问题并且也应解决你的问题。
最好的问候