为什么我不能在C++中重新定义这个变量?

use*_*690 -1 c++ variables

char x;
bool tf;
void IsNumber(char x)
{
    switch (x)
    {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0':
            bool tf(true);
            break;
        default:
            bool tf(false);
            break;
    }
}

int main(int argc, const char * argv[])
{
    using namespace std;
    cout << "Test if a character is a number: " << endl;
    char x;
    cin >> x;
    IsNumber((char) x);
    if (bool tf = true)
        cout << "True" << endl;
    if (bool tf = false)
        cout << "False" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在默认情况下收到错误:说我无法重新定义变量.而且,它在底部说,变量tf不是变量.我是C++的新手,我只知道python可以帮助我吗?

新代码给我一个错误:

#include <iostream>
bool tf;
tf = true;
bool IsNumber(char x)
{
    switch (x)
    {
        case '1':
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 6

您试图在同一范围内声明两个具有相同名称的变量.该switch语句本身定义了一个范围,但各case条款不.如果你想在一个case子句中使用一个范围,那么你必须自己提供一个:

case '0':
{
    bool tf(true);
    break;
}
Run Code Online (Sandbox Code Playgroud)

虽然目前还不清楚它有什么用处; 你要声明一个局部变量然后忽略它.也许你打算设置全局变量:

case '0':
    tf = true;
    break;
Run Code Online (Sandbox Code Playgroud)

所以你可以检查一下

if (tf) // NOT if (bool tf = true) - that also declares a new local variable
Run Code Online (Sandbox Code Playgroud)

或者,不那么怪,也许你想要返回一个值:

bool IsNumber(char x) {
    switch (x) {
        case '0': 
        // and so on
            return true;
        default:
            return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

并测试它

if (IsNumber(x)) {
    cout << "True" << endl;
} else {
    cout << "False" << endl;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果冗长不是你的事

cout << (IsNumber(x) ? "True" : "False") << endl;
Run Code Online (Sandbox Code Playgroud)

甚至

cout << boolalpha << IsNumber(x) << endl;
Run Code Online (Sandbox Code Playgroud)

您可能需要花一些时间阅读介绍性书籍,直到您对范围,声明和定义等基础知识感到满意为止.以下是一些建议.