С++ не работает switch-case, ошибка...

программирование С++

С++. при открытии файла в "case 1" visual C++ подчеркивает switch, выдает 3 ошибки:

передача управления в обход инициализации,
пропуск инициализации из за метки case
пропуск инициализации из-за мтки default

вот код, подскажите где ошибка может быть?

#include <iostream>
#include <clocale>
#include <fstream>

menu:
///прочий код
switch (act){
case 1:

std::ofstream file("anket.txt", std::ios::out | std::ios::app); // открытие файла //на эту строчку ругается

break;

case 2:
//какое то действие
break;
default:
goto menu;
}

Примечание:
попробовал.. теперь ошибка:
IntelliSense: вызов объекта типа класса без соответствующей функции operator() или функций преобразования указателя в функцию
Ответы:
Попробуй обьявить переменную перед switch, например так:
#include <iostream>
#include <clocale>
#include <fstream>
std::ofstream file;
menu:
///прочий код
switch (act){
case 1:
вместо file("anket.txt", std::ios::out | std::ios::app);
ставь это file.open ("anket.txt",std::ios::out | std::ios::app);
то есть file.open ("anket.txt",std::ios::out | std::ios::app);
>подскажите где ошибка может быть?
Стандарт запрещает использование объявлений с инициализацией в подобных switch-конструкциях, а так же, например в случае с goto, в общем, когда эти переходы содержатся в одной области видимости.
Решается, например так:
switch (act) {
case 1: { // отдельная область видимости - OK
   std::ofstream file("anket.txt", std::ios::out | std::ios::app);
   break;
}
..


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.