使用代码:Linux 上的块在 C++ 中的函数中的“未在范围内声明”
Posted
技术标签:
【中文标题】使用代码:Linux 上的块在 C++ 中的函数中的“未在范围内声明”【英文标题】:"Not Declared in scope" in Function in C++ using Code:Blocks on Linux 【发布时间】:2013-04-23 14:38:50 【问题描述】:这是我的代码:
#include <iostream>
#include "rlutil.h"
#include <cmath>
#include <string>
using namespace std;
int getNumber()
int firstNumber;
int secondNumber;
cout << "Please Enter Your First Number." << endl;
cin >> firstNumber;
cout << "Please Enter Your Second Number." << endl;
cin >> secondNumber;
return 0;
int writeNumber()
getNumber();
rlutil::setColor(3);
cout << firstNumber + secondNumber << endl;
return 0;
当我编译它以检查它给我的错误时:
/home/bresser/Documents/LearnC++/main.cpp||在函数‘int writeNumber()’中:| /home/bresser/Documents/LearnC++/main.cpp|24|错误:“firstNumber”未在此范围内声明| /home/bresser/Documents/LearnC++/main.cpp|24|错误:“secondNumber”未在此范围内声明| ||=== 构建完成:2 个错误,0 个警告 ===|
我有点明白它在说什么,只是不明白如何解决它。
【问题讨论】:
作用域变量的概念是语言的基础。您能告诉我们您使用什么资源来学习 C++ 吗?如果没有,我们可以推荐several good books。 【参考方案1】:最简单的解决方法是采取
int firstNumber;
int secondNumber;
脱离 getNumber 函数并赋予它们全局范围。也就是说,将它们放在代码中 using namespace std;
行的下方。
【讨论】:
【参考方案2】:由于您在 getNumber() 中声明了 firstNumber 和 secondNumber,因此 writeNumber() 无法访问它们。如果您不想将变量移动到全局范围,您可以这样做(使用pass by reference):
void getNumber(int &firstNumber, int &secondNumber)
cout << "Please Enter Your First Number." << endl;
cin >> firstNumber;
cout << "Please Enter Your Second Number." << endl;
cin >> secondNumber;
int writeNumber()
int firstNumber;
int secondNumber;
getNumber(firstNumber, secondNumber);
rlutil::setColor(3);
cout << firstNumber + secondNumber << endl;
return 0;
【讨论】:
【参考方案3】:这是因为这两个变量(firstNumber
和 secondNumber
)超出了范围 - 即第二种方法无法“看到”它们,因为它们是在第一种方法中声明的。
将这些变量设为全局变量将解决问题 - 只需移动即可:
int firstNumber;
int secondNumber;
到顶部,在您对getNumber()
的定义之上。
【讨论】:
以上是关于使用代码:Linux 上的块在 C++ 中的函数中的“未在范围内声明”的主要内容,如果未能解决你的问题,请参考以下文章
Swift 上的块 (animateWithDuration:animations:completion:)