Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/56: Рейтинг темы: голосов - 56, средняя оценка - 4.64
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165

Ошибки при вызове форм - Syntax error

03.05.2012, 02:01. Показов 11267. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Visual C++


Пытаюсь подключить одну форму к другой и наоборот.
Вот что выходит:
1) Если в первой форме:
C++
1
2
3
4
5
6
7
#include "Form2.h" //в начале
 
 
private: System::Void autorization_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) {               //где-то в конце
             Form2 ^f2 = gcnew Form2();      
             f2->Show();
             }
А во второй аналогично, только для второй формы, то вот ошибки:
Error 8 error C2061: syntax error : identifier 'Form1' c:\users\женя\documents\visual studio 2008\projects\project\project\Form2.h 174
Error 3 error C2061: syntax error : identifier 'Form2' c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 367
Error 7 error C2065: 'f1' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form2.h 174
Error 9 error C2065: 'f1' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form2.h 175
Error 2 error C2065: 'f2' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 367
Error 4 error C2065: 'f2' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 368
Error 6 error C2065: 'Form1' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form2.h 174
Error 1 error C2065: 'Form2' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 367
Error 5 error C2227: left of '->Show' must point to class/struct/union/generic type c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 368
Error 10 error C2227: left of '->Show' must point to class/struct/union/generic type c:\users\женя\documents\visual studio 2008\projects\project\project\Form2.h 175

2) Если в первой:
C++
1
2
3
4
5
6
7
#include "Form2.h" //в начале
 
 
private: System::Void autorization_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) {               //где-то в конце
             Form2 ^f2 = gcnew Form2();      
             f2->Show();
             }
А во второй:
C++
1
#include "Form1.h"
То вот ошибки:
Error 3 error C2061: syntax error : identifier 'Form2' c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 367
Error 2 error C2065: 'f2' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 367
Error 4 error C2065: 'f2' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 368
Error 1 error C2065: 'Form2' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 367
Error 5 error C2227: left of '->Show' must point to class/struct/union/generic type c:\users\женя\documents\visual studio 2008\projects\project\project\Form1.h 368

3) Если в первой:
C++
1
2
3
4
5
6
7
#include "Form2.h" //в начале
 
 
private: System::Void autorization_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) {               //где-то в конце
             Form2 ^f2 = gcnew Form2();      
             f2->Show();
             }
А во второй ничего, то ошибок нет.
Нужно подключить формы друг к другу по первому варианту. Как?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2012, 02:01
Ответы с готовыми решениями:

Ошибки в C++/CLI - syntax error : missing ';' before '^'
Данные ошибки в строке - (Refill ^refill;),как правильно объявить?Т.к. строкой выше никаких ошибок не находит. error C2143: syntax...

Ошибки Error 2819 и Error 2232 при доступе к членам типа
Уже который день борюсь с кодом который отказывается работать. Чтение учебника и Gугл не дают никаких ответов. IDE Visual Studio 2010 ...

Error C2061: syntax error : identifier 'cout' что делать?
Помогите бедному студенту) Программа (по задумке) должна читать среднее арифметическое цифр числа, введённого с клавиатуры. Но, к...

20
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
05.05.2012, 04:33  [ТС]
Ладно, напишите, как вы подключали одну форму к другой.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.05.2012, 13:16
Дело тут не в версии VS и даже не в языке. Посмотрите здесь:
Ответы на 7 самых частых вопросов по WinForms
это для С#, но разница с С++/cli не велика.
0
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
06.05.2012, 01:14  [ТС]
Статья полезная, но я использую visual studio, поэтому форма создается автоматом (add->new Item), а если я буду использовать
C++
1
Form2 f = new Form2()
, то это уже совсем другой принцип и я даже не знаю, как с этим работать, да и неудобно. Мне нужно использовать регулируемый указатель, как в первом посте:
C++
1
2
Form2 ^f2 = gcnew Form2();      
             f2->Show();
Как связать формы, используя регулируемый указатель?
Или как вы связали две формы в visual studio?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.05.2012, 02:31
Хорошо, что Вы прочли инфу по ссылке. Там вполне достаточно всего, что бы адаптировать под С++/cli. Но раз сложно то Вот код для С++/cli, несколько не похожий, правда, на то, что Вы видели.
Сделаем изменение текста в форме1 из формы2:
1) Имеются 2 формы - Form1 и Form2, на Form1 располагаются Button (button1, будет открывать вторую форму) и Label (label1, здесь будем менять текст). На Form2 - button1, по нажатию на которую будет происходить смена текста в label1.
2) Так как нам из первой формы нужно иметь доступ ко второй, а из второй к первой, то будет возникать проблема перекрестных ссылок (когда Form1.h ссылается на Form2.h, который в свою очередь опять ссылается на Form1.h). Для того, чтобы этого избежать, код первой формы (Form1), который будет иметь доступ ко второй форме (Form2) мы вынесем из h-файла в cpp файл. Таким образом нужно создать файл Form1.cpp.
3) Объявить открытый метод Set в Form1.h для того, чтобы можно было изменить текст label1:
public: void Set(String^ text){label1->Text = text;}
4) В файле Form2.h подключаем Form1.h:
C++
1
#include "Form1.h"
и создаем конструктор, который будет принимать и сохранять ссылку на первую форму для дальнейшего использования:
C++
1
2
3
4
5
6
7
8
9
10
11
 Form2(Form1^ parent)
    {
        InitializeComponent();      
        parentForm = parent;
    }
    //...
    private: Form1^ parentForm;
По клику кнопки, будем вызывать метод Set родительской формы:
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        parentForm->Set("hello from form2");
    }
5) Осталось в первой форме сделать открытие второй формы. Для этого из Form1.h обработчик нажатия кнопки переносим в Form1.cpp, а в h-файле оставляем только его объявление:
Form1.cpp:
C++
1
2
3
4
5
6
7
8
9
10
   #include "StdAfx.h"
    #include "Form1.h"
    #include "Form2.h"
    namespace testApp {
        System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) {
            Form2^ f2 = gcnew Form2(this);
            f2->Show();
            this->Hide();//это не обязательно
        }
    }
В Form1.h (#include "Form2.h" там не нужен, - не будет работать) вставляем только:
C++
1
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e);
На этом все. Можно скомпилировать и проверить проект.
Еще можно посмотреть обсуждение на зарубежном форуме по этой же проблеме - погулив Submitting Form2 and changing Form1 by it's value (Ссылку где-то посеял )
1
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
09.05.2012, 05:00  [ТС]
Решение правильное, но не для меня, пока.
Очень неудобно все переделывать. Мне нужно то решение, которое больше всего подходит под первый пост. Самое простое и стандартное. Можно же открыть вторую форму так:
C++
1
2
3
4
5
6
7
#include "Form2.h" //в начале
 
 
private: System::Void autorization_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) {               //где-то в конце
             Form2 ^f2 = gcnew Form2();      
             f2->Show();
             }
Почему по такому же принципу нельзя подключить одну к другой и наоборот?
Надо исправить код в первом посте.
Заранее спасибо.
0
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
09.05.2012, 06:52
Попробуйте создать глобальные переменные (примерчик), которые являются указателями на соответствующие формы. Причем значения этих переменных прописать в int main().
0
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
15.05.2012, 18:04  [ТС]
Цитата Сообщение от Евгений М. Посмотреть сообщение
Попробуйте создать глобальные переменные (примерчик), которые являются указателями на соответствующие формы. Причем значения этих переменных прописать в int main().
Спасибо, но ничего не вышло.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.05.2012, 18:28
doon, для свободного обмена данными в обоих направлениях нужно потрудится. Советую посмотреть то, что Вам показалось сложным ещё раз - окупится.
В случае, если Вам вторая форма нужна, разово и для ввода не большого количества данных - строки, например, можно сделать так:
Главное Вы уже сделали - Form2 и #include "Form2.h" в хидере первой формы.
1. Смените модификатор доступа текстбокса, например textBox1, второй формы с private на public.
2. В первой форме покажите вторую модально:
C++
1
2
3
4
5
private: System::Void autorization_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) {              
Form2 ^f2 = gcnew Form2();      
f2->ShowDialog();//это значит пока она не закроется исполнение кода первой формы приостановлено
String^ myStrFromForm2 = f2->textBox1->Text;// тут "открытый" текстбокс уже чем-то заполнен, значение забираем сами
             }
2
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
19.05.2012, 23:55  [ТС]
Сделал все так, как Вы сказали в 5 сообщении. Вот, собственно, код и ошибки (выкладываю полностью для целостности картины):
Form1.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#pragma once
 
 
namespace test1 {
 
    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>
    /// Summary for Form1
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 
    private: System::Windows::Forms::Label^  label1;
 
    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->label1 = (gcnew System::Windows::Forms::Label());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(53, 56);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(126, 153);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(35, 13);
            this->label1->TabIndex = 1;
            this->label1->Text = L"label1";
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Controls->Add(this->label1);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
            this->PerformLayout();
 
        }
#pragma endregion
        
 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e); 
    };
}
Form2.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#pragma once
 
#include "Form1.h"
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 test1 {
 
    /// <summary>
    /// Summary for Form2
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    public ref class Form2 : public System::Windows::Forms::Form
    {
    public:
Form2(Form1^ parent)
    {
        InitializeComponent();      
        parentForm = parent;
    }
 
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form2()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
             Form1^ parentForm;
 
    protected: 
 
    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(112, 122);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
            // 
            // Form2
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Controls->Add(this->button1);
            this->Name = L"Form2";
            this->Text = L"Form2";
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 parentForm->Set("hello from form2");
             }
    };
}
Form1.cpp:
C++
1
2
3
4
5
6
7
8
9
10
  #include "StdAfx.h"
    #include "Form1.h"
    #include "Form2.h"
    namespace testApp {
        System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) {
            Form2^ f2 = gcnew Form2(this);
            f2->Show();
            this->Hide();
        }
    }
Ошибки:
Error 2 error C2653: 'Form1' : is not a class or namespace name c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 5
Error 3 error C2065: 'Form2' : undeclared identifier c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 6
Error 4 error C2065: 'f2' : undeclared identifier c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 6
Error 5 error C2061: syntax error : identifier 'Form2' c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 6
Error 6 error C2065: 'f2' : undeclared identifier c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 7
Error 7 error C2227: left of '->Show' must point to class/struct/union/generic type c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 7
Error 8 error C2673: 'testApp::button1_Click' : global functions do not have 'this' pointers c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 8
Error 9 error C2227: left of '->Hide' must point to class/struct/union/generic type c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 8
Error 1 error C2039: 'Set' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form2.h 88
Error 10 error C2039: 'Set' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form2.h 88
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.05.2012, 00:59
Цитата Сообщение от doon Посмотреть сообщение
#include "StdAfx.h"
#include "Form1.h"
#include "Form2.h"
namespace testApp {
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ f2 = gcnew Form2(this);
f2->Show();
this->Hide(); } }
doon, строчка:
C++
1
namespace testApp {
подключает пространство имён проекта. У меня он назывался testApp, а у Вас он вроде test1 называется. Вот и напишите:
C++
1
namespace test1 {
Чуть позже посмотрю подробнее, но этой ошибки достаточно, что бы ни чего не видно было компилятору.
1
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
20.05.2012, 01:50  [ТС]
Спасибо, остались только:
Error 1 error C2039: 'Set' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form2.h 88
Error 2 error C2039: 'Set' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form2.h 88
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.05.2012, 02:22
doon, вы создали открытый метод Set как сказано в примере?

3) Объявить открытый метод Set в Form1.h для того, чтобы можно было изменить текст label1:
C++
1
public: void Set(String^ text){label1->Text = text;}
0
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
20.05.2012, 02:22  [ТС]
Поставил parentForm->label1->Text = "hello from form2"; в Form2.h.
Ошибки:
Error 1 error C2248: 'test1::Form1::label1' : cannot access private member declared in class 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form2.h 88
Error 2 error C2248: 'test1::Form1::label1' : cannot access private member declared in class 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form2.h 88
В инициализации label1 поставил public - идет без ошибок.
Но при запуске нету реакции на нажатие кнопки в Form1.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.05.2012, 02:46
Цитата Сообщение от doon Посмотреть сообщение
В инициализации label1 поставил public - идет без ошибок.
Уф! Вот и победа. Значит всё заработало!
Цитата Сообщение от doon Посмотреть сообщение
Но при запуске нету реакции на нажатие кнопки в Form1.
Тут вроде ясно. Кнопка не подписана на событие Click (ни на какое не подписана точнее). Прототип обработчика добавлен вручную.
Добавьте обработчик из дизайнера.
1
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
20.05.2012, 03:04  [ТС]
Сделал через дизайнер.
Вот Form1.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#pragma once
 
 
namespace test1 {
 
    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>
    /// Summary for Form1
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    public: System::Windows::Forms::Label^  label1;
     
 
    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
 
    private:
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->label1 = (gcnew System::Windows::Forms::Label());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(53, 56);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(126, 153);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(35, 13);
            this->label1->TabIndex = 1;
            this->label1->Text = L"label1";
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Controls->Add(this->label1);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
            this->PerformLayout();
 
        }
    private:
#pragma endregion
        
 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e); 
    };
}
Вот Form1.cpp:
C++
1
2
3
4
5
6
7
8
9
10
  #include "StdAfx.h"
    #include "Form1.h"
    #include "Form2.h"
    namespace test1 {
        System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) {
            Form2^ f2 = gcnew Form2(this);
            f2->Show();
            this->Hide();
        }
    }
Ошибки:
Error 4 error C2059: syntax error : 'this' c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 5
Error 5 error C2039: 'button1_Click_1' : is not a member of 'test1::Form1' c:\Users\женя\Documents\Visual Studio 2008\Projects\test1\test1\Form1.cpp 5
Error 1 error C2039: 'button1_Click_1' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 2 error C2065: 'button1_Click_1' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 3 error C3350: 'System::EventHandler' : a delegate constructor expects 2 argument(s) c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 6 error C2039: 'button1_Click_1' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 7 error C2065: 'button1_Click_1' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 8 error C3350: 'System::EventHandler' : a delegate constructor expects 2 argument(s) c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 9 error C2039: 'button1_Click_1' : is not a member of 'test1::Form1' c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 10 error C2065: 'button1_Click_1' : undeclared identifier c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75
Error 11 error C3350: 'System::EventHandler' : a delegate constructor expects 2 argument(s) c:\users\женя\documents\visual studio 2008\projects\test1\test1\Form1.h 75

Ошибки появились после добавления this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.05.2012, 03:34
Цитата Сообщение от doon Посмотреть сообщение
Ошибки появились после добавления this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
Это потому что прототип:
button1_Click() в Form1.h Вы опять же скопировали из примера. А нужно было его создать в дизайнере, тогда бы и кнопка на него подписалась. Это и вручную делается, но Вам ещё с дизайнером бы разобраться. Ведь теперь когда вы добавили обработчик из дизайнера, он видя что какойто button1_Click() уже есть прописал Вам:
button1_Click_1()
Далее понимая, что два обработчика не нужны Вы удалили... button1_Click_1()!!!
Теперь просто переименуйте button1_Click() в button1_Click_1()
и всё заработает)
1
12 / 12 / 0
Регистрация: 25.06.2011
Сообщений: 165
20.05.2012, 04:20  [ТС]
Да, все вышло!
0
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 5
15.07.2014, 04:25
Цитата Сообщение от IGPIGP Посмотреть сообщение
public: void Set(String^ text){label1->Text = text;}
Additional information: Ссылка на объект не указывает на экземпляр объекта.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.07.2014, 17:41
Цитата Сообщение от Alexandr23 Посмотреть сообщение
Additional information: Ссылка на объект не указывает на экземпляр объекта.
Alexandr23, для людей знакомых с с++ такое сообщение, - удар по психике.
Дело в том, что в С++/cli как и в C# ссылку можно объявить без инициализации. То есть семантически ссылки в этих языках, это более указатели похожие на ссылки только в том, что доступ к физическому адресу через них отсутствует. Другими словами объявляя:
C++
1
Label^ labla;
мы делаем нечто похожее на:
C++
1
int *bla_bla;
в с++.
Пока Вы не инициализируете переменную читать от-туда плохо, а писать туда на некоторых OS и беда. Windows защищается весьма успешно.
Можно констатировать, что Майкрософт сделала гораздо больше сверх того, что разумно, когда пытаясь привлечь к своему детищу плюсовиков, приняла решение назвать свои управляемые дескрипторы ссылками. В итоге, даже люди лояльные к "тёмной стороне")), вынуждены называть этих зверей то ссылками, то указателями, когда пишут книжки о течении силы DoTNet.
Неинициализированная ссылка, - типичная ошибка. Там, где вы не создали объекта оператором gcnew для ссылочного класса и попытались обратиться по имени/ссылке (пустышке) и вывалится. Конкретнее не могу сказать, что Вы не создали... уж не экземпляр Label^ ли? Без кода трудно сказать. Эту тему читало много народу. Прочтите внимательно (заглядывая в книжки и сеть там где незнакомо) и всё получится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2014, 17:41
Помогаю со студенческими работами здесь

Непонятная ошибка компилятора "error C2059: syntax error 'constant'"
есть класс public ref class Form2 : public System:: Windows:: Forms:: Form { public: System:: String^ s; public: ...

Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов
Добрый вечер всем! При изучении и написании работы столкнулся с ошибкой от которой не могу избавиться. (Т.к. очень сильно плаваю в ООП)....

Ошибки синтаксиса: syntax error, unexpected 'else'
Всем добрый день! Очень плохо понимаю по php. Но прошу помочь. Вышла ошибка Parse error: syntax error, unexpected 'else' (T_ELSE),...

Ошибки компилятора Syntax error:missing ')' before 'constant'
Здрасте уважаемые Гуру! Пытаюсь компилировать код и никак немогу понять что ж хочет от меня компилятор(VC 6.0) #include...

PDO - Syntax error or access violation: 1064 You have an error in your SQL syntax
public function getAllGategoryId(){ $sql = &quot;SELECT id_cat FROM category WHERE show = yes...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru