struct chislo{
int m1,m2,ch1,ch2,ost;
} x[20];
Структуры в Visual C++ (VS 2008)
Проблема следующая. Пишу приложение на Visual C++ (Windows Forms).
Нужно создать следующую структуру
struct structura{
int m1,m2,m3; };
и массив
structura s[20];
и нужно сделать так, чтобы этот массив был обьявлен глобально.
Или хотя бы чтобы доступ к нему имели все функции и элементы формы (форма одна).
пытался обьявлять внутри класса формы, компилятор ругается
P.S. Возможно вопрос покажется мега глупым, но раньше все время работал в делфях, на с++ писал только консольные приложения, а сейчас возникла потребность написать на MS VS 2008 приложение с помощью Windows Forms.
Заранее благодарю!
Приведите свой код, и ошибки, которыми компилятор ругается. Будет виднее.
Код:
структуру пытаюсь обьявить в классе Form1:
Код:
public ref class Form1 : public System::Windows::Forms::Form
{
{
лог ошибок:
Код:
Form1.h(1084) : error C2814: Теориячисел::Form1::chislo: собственный тип не может быть вложенным в управляемом типе "Теориячисел::Form1"
Form1.h(23): см. объявление 'Теориячисел::Form1'
Form1.h(1086) : error C4368: не удается определить "x" как член управляемого "Теориячисел::Form1": смешанные типы не поддерживаются
Form1.h(23): см. объявление 'Теориячисел::Form1'
Form1.h(1086) : error C4368: не удается определить "x" как член управляемого "Теориячисел::Form1": смешанные типы не поддерживаются
Код:
public ref class Form1 : public System::Windows::Forms::Form
{
ref struct chislo
{
int m1,m2,ch1,ch2,ost;
};
array<chislo^> ^x;
public:
Form1(void)
{
InitializeComponent();
x = gcnew array<chislo^>(20);
for (int i=0; i<20; i++)
x = gcnew chislo();
...
}
...
};
{
ref struct chislo
{
int m1,m2,ch1,ch2,ost;
};
array<chislo^> ^x;
public:
Form1(void)
{
InitializeComponent();
x = gcnew array<chislo^>(20);
for (int i=0; i<20; i++)
x = gcnew chislo();
...
}
...
};
Обязательно для изучения: array
PS: раз уж используете управляемый код, переходите на C# - намного проще.
Код:
public ref class Form1 : public System::Windows::Forms::Form
{
ref struct chislo
{
int m1,m2,ch1,ch2,ost;
};
public:
Form1(void)
{
InitializeComponent();
array<chislo^>^ x = gcnew array<chislo^>(20);
for (int i=0; i<20; i++)
x = gcnew chislo();
}
{
ref struct chislo
{
int m1,m2,ch1,ch2,ost;
};
public:
Form1(void)
{
InitializeComponent();
array<chislo^>^ x = gcnew array<chislo^>(20);
for (int i=0; i<20; i++)
x = gcnew chislo();
}
но когда на кнопку вешаю, допустим, присвоение
Код:
x[0]->ost=5;
то получаю следующее:
Код:
Form1.h(1177) : error C2248: System::Windows::Forms::Control::x: невозможно обратиться к private член, объявленному в классе "System::Windows::Forms::Control"
Form1.h(23): см. объявление 'System::Windows::Forms::Control::x'
c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll: см. объявление 'System::Windows::Forms::Control'
Form1.h(1177) : error C2109: для индекса требуется массив или указатель
Form1.h(1177) : error C2227: выражение слева от "->ost" должно указывать на тип класса, структуры или объединения либо на универсальный тип
Form1.h(23): см. объявление 'System::Windows::Forms::Control::x'
c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll: см. объявление 'System::Windows::Forms::Control'
Form1.h(1177) : error C2109: для индекса требуется массив или указатель
Form1.h(1177) : error C2227: выражение слева от "->ost" должно указывать на тип класса, структуры или объединения либо на универсальный тип
Вы объявили массив внутри конструктора класса, соответственно он получился локальный и больше нигде не виден.
Цитата: koodeer
Вы объявили массив внутри конструктора класса, соответственно он получился локальный и больше нигде не виден.
Действительно))) даж не подумал когда приписывал )
Цитата: koodeer
Я поправил свой код выше. Сперва забыл там объявить массив.
Огромное спасибо за помощь! Все заработало
Еще один вопросик будет, не касающийся озвученной в шапке темы.
Допустим у меня есть файл func.h где описаны некторые функции которые я буду вызывать из формы, а в этих функцих есть строчки отвечающие за управление элементами формы. Допустим функция будет добавлять текст в richTextBox.
Что нужно сделать, чтобы функция в func.h имела доступ к элементам формы?
передать внутрь функции в качестве параметр хэндл нужного компонента (richTextBox)