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

Error: variable was not declared in this scope

本文关键字:范围内 声明 变量 错误      更新时间:2023-10-16

我得到下面的错误,当我试图编译下面的代码。

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++编译器

您需要在将函数声明为友元之前为它提供声明。
根据标准,作为友元的声明不符合实际的函数声明。

11标准c++§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 
};

有意思。看起来test1.hdisplay()friend声明在g++中算作一个实际的函数声明。

我不认为标准实际上强制这样做,所以你可能想在test1.h中为display()添加一个适当的声明:

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