1

嗨,我正在尝试了解友元函数的范围,但出现“未在范围内声明”错误。这是我的代码:

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

4

3 回答 3

2

在您的节点类中,您声明了一个友元函数 int add (int, int)。但是,目前编译器还没有遇到这个函数,因此它是未知的。

您可以为您的添加功能制作一个单独的头文件和源文件。然后在 node.h 中包含新的标题。因为在您声明 Node 的文件中,函数 add 当前未知。

因此,您可以创建一个 add.h 和一个 add.cpp 文件,并在声明 Node 之前包含 add.h。不要忘记编译 add.cpp 为好。

于 2013-05-27T20:20:28.393 回答
2

它是Linux方面的一个错误。代码应该可以工作。我现在有在 Windows 端编译良好的代码,当我将它移到 Linux 端时,我得到了同样的错误。显然,您在 Linux 端使用的编译器没有看到/使用头文件中的朋友声明,因此会出现此错误。通过在使用该函数之前将朋友函数的实现简单地移动到 C++ 文件中(例如:可能在函数回调分配中使用),这解决了我的问题,也应该解决你的问题。

此致

于 2015-08-05T17:36:23.117 回答
1

您实际上还没有声明该函数。

extern int add(int, int);
于 2013-05-27T20:25:20.163 回答