Создал структуру, в ней создал массив. Пытаюсь изменить значение массива в другой процедуре и вывести в пределах этой же процедуры - все работает. Как только вывод элементов массива перемещаю в другую процедуру, выводит мусор. Как исправить? Изменять как-то надо по ссылке, но я пока еще не разобрался с указателями в С++. Помогите, пожалуйста! Вот код:
struct Myset //создаем структуру Myset, которая будет играть роль множества
{
int Arr[256];
};
void Init() //функция заполнения массива целыми числами от 0 до 255
{
Myset set_in;
int i;
for (i = 0; i < 256; i++)
{
set_in.Arr[i] = i;
}
}
void Output()
{
Myset set_out;
int i;
for (i = 0; i < 256; i++)
{
cout << set_out.Arr[i];
}
}
Другие языки программирования и технологии
С++. Как сделать, чтобы значение массива, созданного в структуре изменялось в другой процедуре?
Процедуры -> Функции.
Здесь я предложу использовать функции внутри структуры. То есть они станут методами в частности нестатическими, то есть исполняемые для конкретного экземпляра. Заполнение осуществляется через конструктор, который вызывает метод. Вывод на экран происходит при вызове метода вывода, объявленного в теле структуры, из экземпляра.
Ссылки, указатели не нужны в данном случае.
Эти функции обслуживают экземпляры структуры, по - этому они должны быть методами и находиться в теле структуры с точки зрения эстетики.
Если что не понятно - спрашивай, объясню.
#include < iostream >
#include < iomanip >
using namespace std;
struct Myset //Создаем структуру Myset, которая будет играть роль множества
{
int Arr[256]; //Поле структуры
Myset() //Нулевой конструктор
{
Init();
}
void Init() //Метод заполнения поля Arr
{
for (unsigned i = 0; i < 256; i++)
{
Arr[i] = i;
}
}
void Output() //Метод отображения значения поля Arr
{
for (unsigned i = 0; i < 256; i++)
{
cout << setw(4) << Arr[i];
}
}
};
void main()
{
setlocale(LC_ALL, "rus");
system("color 0A");
Myset *ms = new Myset(); //Объявление экземпляра структуры и инициализация его посредством нулевого конструктора Myset()
ms->Output(); //Вызов метода отображения из экземпляра - метод не статический
cin.get(); cin.get();
}
Здесь я предложу использовать функции внутри структуры. То есть они станут методами в частности нестатическими, то есть исполняемые для конкретного экземпляра. Заполнение осуществляется через конструктор, который вызывает метод. Вывод на экран происходит при вызове метода вывода, объявленного в теле структуры, из экземпляра.
Ссылки, указатели не нужны в данном случае.
Эти функции обслуживают экземпляры структуры, по - этому они должны быть методами и находиться в теле структуры с точки зрения эстетики.
Если что не понятно - спрашивай, объясню.
#include < iostream >
#include < iomanip >
using namespace std;
struct Myset //Создаем структуру Myset, которая будет играть роль множества
{
int Arr[256]; //Поле структуры
Myset() //Нулевой конструктор
{
Init();
}
void Init() //Метод заполнения поля Arr
{
for (unsigned i = 0; i < 256; i++)
{
Arr[i] = i;
}
}
void Output() //Метод отображения значения поля Arr
{
for (unsigned i = 0; i < 256; i++)
{
cout << setw(4) << Arr[i];
}
}
};
void main()
{
setlocale(LC_ALL, "rus");
system("color 0A");
Myset *ms = new Myset(); //Объявление экземпляра структуры и инициализация его посредством нулевого конструктора Myset()
ms->Output(); //Вызов метода отображения из экземпляра - метод не статический
cin.get(); cin.get();
}
Геннадий Кочегуров
Ох, привык к паскалю, поэтому забываю, что в С++ функции:) Спасибо большое, разобрался!
Надо передать указатель или ссылку на структуры из одной функции в другую. Или использовать глобальную переменную. У тебя в каждой функции свой экземпляр структуры. Во второй функции массив не инициализирован, потому выводится мусор.
Геннадий Кочегуров
А как это делается, не подскажите?
Геннадий Кочегуров
С глобальной переменной я разобрался, но меня все же интересует вопрос по передаче по ссылке. Как это вообще делается, можете подсказать?
Похожие вопросы
- Как передать значение массива в аргумент? (ПЕРЕЗАЛИВ) с++
- Помогите сделать функцию для массива.
- ПОМОГИТЕ СДЕЛАТЬ ПРОГРАММИРОВАНИЕ ЛВУМЕРНЫЙ МАССИВ
- 2. Произведение элементов массива В(10, 25). Массив создать любым способом.
- Как в с++ сделать полноценный динамический массив?
- Помогите с паскалем! Как значение массива в 1000 элементов перенести в файл?
- Как сделать сортировку значений заработных плат
- С++ Как создать массив кортежей и записать значения
- Для аргумента x, изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций.
- Напишите программу, которая находит в массиве количество элементов, равных заданному значению X .