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

Why can't I redefine this variable in C++?

本文关键字:定义 变量 新定义 不能 C++ 为什么      更新时间:2023-10-16
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;
}

默认情况下我收到错误:说我无法重新定义变量。此外,它在底部说,我变量 tf 不是一个变量。我真的是C++新手,我只知道python有人可以帮助我吗?

新代码给我一个错误:

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

您正在尝试在同一作用域中声明两个具有相同名称的变量。switch语句本身定义作用域,但每个 case 子句都没有。如果您希望在 case 子句中限定范围,则必须自己提供一个范围:

case '0':
{
    bool tf(true);
    break;
}

虽然不清楚这有什么好处;你声明了一个局部变量然后忽略它。也许你的意思是设置全局变量:

case '0':
    tf = true;
    break;

因此,您可以检查它

if (tf) // NOT if (bool tf = true) - that also declares a new local variable

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

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

并进行测试

if (IsNumber(x)) {
    cout << "True" << endl;
} else {
    cout << "False" << endl;
}

或者,如果啰嗦不是你的事

cout << (IsNumber(x) ? "True" : "False") << endl;

甚至

cout << boolalpha << IsNumber(x) << endl;

您可能应该花一些时间阅读入门书籍,直到您对作用域、声明和定义等基础知识感到满意。以下是一些建议。

你还没有给 tf 分配任何东西,对于比较运算符,我们想要 == 而不仅仅是 =。

if (tf == true) {
}

您只能定义一个变量,您可以根据需要多次分配它。

bool tf = false 

意味着我定义一个变量并分配它

如果我只是想稍后分配它

tf = false 

如果我想做条件测试

if (tf){do stuff} 

你在最顶部将 x 定义为全局变量,然后尝试在 main 中再次定义它。您必须选择一个或另一个,或重命名一个。您可能想做的是摆脱主要的那个。

你还会将布尔值比较为 =,而不是它们应该像 ==。

编辑:你实际上根本不需要在那里进行比较。

if(tf){
    cout << "Truen"
}
else cout << "Falsen"

这将查看 tf 是否为真并输出为真,如果不是,则输出为假。