Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++

55K
06 мая 2011 года
g00dv1n
22 / / 28.11.2010
Как сделать чтобы локальная переменная созданная в одном блоке switch была доступна во всех файлах программы.
278
06 мая 2011 года
Alexander92
1.1K / / 04.08.2008
Никак.
7
06 мая 2011 года
@pixo $oft
3.4K / / 20.09.2006
Даже static'ом?
278
06 мая 2011 года
Alexander92
1.1K / / 04.08.2008
@pixo $oft, так а как вы перепрыгнете через область видимости? static вам даст только то, что переменная не уничтожится после выхода из блока switch. В принципе, вопрос действительно можно трактовать двояко:
а) возможно ли физически сохранить в памяти локальную переменную для последующего доступа откуда угодно? - ответ будет "да", через static и указатели;
б) возможно ли сделать переменную, созданную внутри switch, глобальной? - нет, нельзя.
55K
06 мая 2011 года
g00dv1n
22 / / 28.11.2010
Так и думал что это невозможно.

Вот смотрите мне нужно сделать консольную курсовую, делаю меню.
В одном из пунктов меню "Создать объекты классов" у меня получаеться список классов объекты которых мы можем создать.
Я хотел сделать с помощью swith чтобы создавать по выбору объекты которые нужны и потом уже использовать.
Подскажите как это можно по-другому сделать.
278
06 мая 2011 года
Alexander92
1.1K / / 04.08.2008
У вас множественный выбор, я правильно понял задачу?
55K
06 мая 2011 года
g00dv1n
22 / / 28.11.2010
Да все верно.
278
07 мая 2011 года
Alexander92
1.1K / / 04.08.2008
Ну сделайте глобальный массив выбираемых пунктов и заполняйте его из соответствующего диалога или формы. Завтра с утра набросаю пример, если нужно.
55K
07 мая 2011 года
g00dv1n
22 / / 28.11.2010
Буду весьма благодарен!
278
07 мая 2011 года
Alexander92
1.1K / / 04.08.2008
Так, показываю на формах, быстрее получится. Пусть есть две формы - на одной форме фиксируются те объекты, которые выбирает пользователь, вторая форма отвечает собственно за выбор. Получается:

Form1.h:
Код:
#pragma once

namespace ChooseObjects {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Сводка для Form1
    ///
    /// Внимание! При изменении имени этого класса необходимо также изменить
    ///          свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
    ///          связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
    ///          конструкторы не смогут правильно работать с локализованными
    ///          ресурсами, сопоставленными данной форме.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
            createObjects = gcnew array<bool>(5);
            for (int i = 0; i < 5; i++)
                createObjects = false;
        }

    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
            delete[] createObjects;
        }

        // some auto-generated code

#pragma endregion
    private:
        array<bool>^ createObjects;
        Form2^ chooseObjectsForm;

    public:
        void ApplyObjectsChoice();

    private: System::Void ShowChooseObjectsButton_Click(System::Object^  sender, System::EventArgs^  e) {
            chooseObjectsForm = gcnew Form2();
            chooseObjectsForm->Owner = this;
            chooseObjectsForm->Show();
        }
};
}


Form1.cpp:
Код:
#include "stdafx.h"
#include "Form2.h"
#include "Form1.h"

using namespace ChooseObjects;

void Form1::ApplyObjectsChoice() {
    Object1_Chosen->Text = chooseObjectsForm->ChooseObject1->Checked ? "Yes" : "No";
    Object2_Chosen->Text = chooseObjectsForm->ChooseObject2->Checked ? "Yes" : "No";
    Object3_Chosen->Text = chooseObjectsForm->ChooseObject3->Checked ? "Yes" : "No";
    Object4_Chosen->Text = chooseObjectsForm->ChooseObject4->Checked ? "Yes" : "No";
    Object5_Chosen->Text = chooseObjectsForm->ChooseObject5->Checked ? "Yes" : "No";
}

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);

    // Создание главного окна и его запуск
    Application::Run(gcnew Form1());
    return 0;
}

(Object1_Chosen, ..., Object5_Chosen - это labels, по картинке видно)

Form2.h:
Код:
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


namespace ChooseObjects {

    /// <summary>
    /// Сводка для Form2
    ///
    /// Внимание! При изменении имени этого класса необходимо также изменить
    ///          свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
    ///          связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
    ///          конструкторы не смогут правильно работать с локализованными
    ///          ресурсами, сопоставленными данной форме.
    /// </summary>
    public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
        Form2(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }

    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }

    public: System::Windows::Forms::CheckBox^  ChooseObject1;
    public: System::Windows::Forms::CheckBox^  ChooseObject2;
    public: System::Windows::Forms::CheckBox^  ChooseObject3;
    public: System::Windows::Forms::CheckBox^  ChooseObject4;
    public: System::Windows::Forms::CheckBox^  ChooseObject5;

    private: System::Windows::Forms::Button^  ChooseObjectsButton;

    // some more auto-generated code

#pragma endregion
    private: System::Void ChooseObjectsButton_Click(System::Object^  sender, System::EventArgs^  e);

};
}


Form2.cpp:
 
Код:
#include "StdAfx.h"
#include "Form2.h"
#include "Form1.h"

using namespace ChooseObjects;

System::Void Form2::ChooseObjectsButton_Click(System::Object^  sender, System::EventArgs^  e) {
    ((Form1^)(this->Owner))->ApplyObjectsChoice();
    this->Close();
}


Результат следующий:
[ATTACH=CONFIG]5115[/ATTACH]
5
09 мая 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: g00dv1n
Как сделать чтобы локальная переменная созданная в одном блоке switch была доступна во всех файлах программы.



Зачем?

260
09 мая 2011 года
Ramon
1.1K / / 16.08.2003
Уж лучше бы автор продемонстрировал то, что он пытается сделать, а не надувал очередного коня.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог