Friend函数未在此范围内声明错误

时间:2013-05-27 20:17:35

标签: c++ declaration friend-function

您好我正在尝试了解友元函数的范围,并且我得到了“未在范围内声明”错误。这是我的代码:

//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中收到错误“在此范围内添加未声明”。当我在类范围中声明函数时,为什么会出现此错误?任何帮助将不胜感激。感谢

3 个答案:

答案 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 ++文件中的实现(例如:可能在函数回调赋值中使用),这解决了我的问题并且也应解决你的问题。

最好的问候