使用代码: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】:

这是因为这两个变量(firstNumbersecondNumber)超出了范围 - 即第二种方法无法“看到”它们,因为它们是在第一种方法中声明的。

将这些变量设为全局变量将解决问题 - 只需移动即可:

int firstNumber;
int secondNumber;

到顶部,在您对getNumber() 的定义之上。

【讨论】:

以上是关于使用代码:Linux 上的块在 C++ 中的函数中的“未在范围内声明”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 上的块 (animateWithDuration:animations:completion:)

linux上的C++代码比windows上慢得多[关闭]

C++ CUDA:为啥我的块尺寸不起作用?

如何使用 C++ 代码中的 BTRFS 写入时复制?

MTLSharedEventListener 块在命令缓冲区调度之前调用而不是在运行中

将文本写入文件后的mfc c++奇怪的块字符