错误:变量未在此范围内声明
Error: variable was not declared in this scope
我得到下面的错误,当我试图编译下面的代码。
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.h
中display()
的friend
声明在g++中算作一个实际的函数声明。
我不认为标准实际上强制这样做,所以你可能想在test1.h
中为display()
添加一个适当的声明:
#include <iostream>
int display();
class Test
{
public:
friend int display();
};
相关文章:
- 错误:未在此范围内声明'reverse'
- 错误:"imread"未在此范围内声明
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 如何找到在本地范围内声明的变量的地址?
- NT状态未在此范围内声明
- 变量未在此范围内声明 数组线性搜索
- 包含文件中的 Typdef "未在此范围内声明"
- 'ClassName'和'ClassInstance'未在此范围内声明
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 如何修复错误:"vreinterpretq_u32_f64"未在此范围内声明 - 在Android上使用Eigen构建
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 错误:"SHGetKnownFolderPath"未在此范围内声明
- 错误:'Sprite'未在此范围内声明