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

时间:2013-11-21 23:06:41

标签: 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;
}

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

新代码给我一个错误:

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

4 个答案:

答案 0 :(得分:6)

您尝试在同一范围内声明两个具有相同名称的变量。 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;

在您熟悉范围,声明和定义等基础知识之前,您可能需要花一些时间阅读介绍性书籍。 Here是一些建议。

答案 1 :(得分:0)

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

你也将你的bool比作= =而不是它们应该如何==。

编辑:你实际上根本不需要比较。

if(tf){
    cout << "True\n"
}
else cout << "False\n"

这将看到tf是否为true并输出为true,如果不是,则输出false。

答案 2 :(得分:0)

你没有为tf指定任何东西,对于我们想要的比较运算符==而不只是='s。

if (tf == true) {
}

答案 3 :(得分:0)

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

bool tf = false 

表示我定义一个变量并分配它

如果我只想稍后分配

tf = false 

如果我想进行条件测试

if (tf){do stuff}