错误:未在此范围内声明变量

时间:2013-03-29 06:26:08

标签: c++ c++builder

当我尝试编译以下代码时,我收到以下错误。

Error: main.cpp: In function "int main()":
       main.cpp:6: error: "display" was not declared in this scope

test1.h

#include<iostream.h>
class Test
{
  public:
    friend int display();
};

test1.cpp:

#include<iostream.h>
int  display()
{
    cout<<"Hello:In test.cc"<< endl;
    return 0;
}

的main.cpp

#include<iostream.h>
#include<test1.h>
int main()
{
 display();
 return 0;
}

奇怪的是我能够成功编译unix。 我正在使用gcc和g ++编译器

2 个答案:

答案 0 :(得分:3)

在将其声明为朋友之前,您需要提供该功能的声明 作为朋友的声明不符合标准的实际功能声明。

C ++ 11标准§7.3.1.2[namespace.memdef]:
第3段:

  

[...]如果非本地类中的friend声明首先声明一个类或函数,那么友元类或函数是最内层封闭命名空间的成员。 在该命名空间范围内提供匹配声明(在授予友谊的类定义之前或之后),通过非限定查找或限定查找找不到朋友的姓名。 [...]

#include<iostream.h>
class Test
{
  public:
    friend int display();  <------------- Only a friend declaration not actual declaration
};

你需要:

#include<iostream.h>
int display();            <------- Actual declaration
class Test
{
  public:
    friend int display();     <------- Friend declaration 
};

答案 1 :(得分:2)

有趣。看起来frienddisplay()的{​​{1}}声明似乎是g ++中的实际函数声明。

我不认为标准实际上强制执行此操作,因此您可能希望在test1.h中为display()添加适当的声明:

test1.h