C ++ bool не инициализируется

0

Bellow - это простая программа, которая, как предполагается, проверяет определенный текстовый файл, чтобы увидеть, присутствует ли в нем слово, в данном случае имя.

Я продолжаю всплывать, заявляя: "Переменная" NamePresent "используется без инициализации". Является ли NamePresent инициализированным как bool?

#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream NameFile("Names.txt");   
    std::string Name;
    bool NamePresent;

    std::cin >> Name;

    while(NameFile >> Name)
    {
        if(NamePresent == true)
        {
            std::cout << "This works!" << std::endl;
        }
        if(NamePresent == false)
        {
            std::cout << "Nope!" << std::endl;
        }
    }

return 0;
}
Теги:
while-loop
text-files

4 ответа

3
Лучший ответ

Нет, объявлено как bool. Вам все равно нужно присвоить ему значение true/false:

bool NamePresent = false;
2

Любой достойный компилятор даст нам предупреждение, если программа пытается использовать переменную, которая не инициализирована (неинициализирована).

test.cpp: В функции 'int main(): test.cpp: 15: 9: warning:' NamePresent может использоваться неинициализированным в этой функции [-Wmaybe-uninitialized], если (NamePresent = true) ^

Вы должны внимательно относиться к сообщениям компилятора.

  • 1
    Я буду более сознательным в этом. Спасибо.
2

В жизни переменной есть 4 важных момента:

  1. декларация

На этом этапе вы сообщаете компилятору о типе переменной. Это необходимо, чтобы компилятор знал, как интерпретировать данные в памяти, например.

  1. Определение

Это "рождение" переменной. Если в объявлении вы указали его имя и тип, здесь вы даете указание компилятору выделить для него память. Обратите внимание, что оператор, такой как int a; как объявление, так и определение, поскольку оно вводит новое имя (a) и выделяет память для переменной int.

  1. инициализация

Когда переменная определена, для нее зарезервирована некоторая память. Начальное значение переменной - это содержимое этой памяти, которое может быть любым (это обычно называют мусором). Поэтому вам нужно назначить первое полезное значение вашей переменной. Конечно, вы можете использовать его, не инициализируя его значением, но это подвержено ошибкам, так как вы не можете полагаться на значение этой переменной. Компилятор знает об этом и дает вам предупреждение. Обратите внимание, что вы также получите предупреждения, если вы инициализируете переменную в цикле или условной ветки, поскольку условие может быть неверным или цикл может не выполняться.

  1. Смерть

Хотя этот вопрос не имеет реального использования для вашего вопроса, стоит вспомнить. Переменная умирает, когда она выходит из области видимости (обычно, когда блок команд, где он был определен, заканчивается, если это локальная переменная и когда программа заканчивается, если она является глобальной переменной).

2

"Инициализировано" означает инициализированное значением.

bool NamePresent = false;

В вашем коде выше он объявлен как bool, но не инициализирован. Кроме того, никакая другая инструкция в вашем коде не присваивает значение NamePresent (но, предположительно, вы работаете над этим).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню