Я хочу сделать так, что бы у меня кнопка, находящаяся на 1-ой форме (Form1) открывала 2-ую форму (Form2). (Имя проекта ILYA 2)
Дело в том, что при указании действия на кнопку
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{Form2::Show();
}
Выдаёт ошибку
Error 1 error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function
В файлах ILYA 2.cpp и Form1.h прописал
#include "Form2.h"
Не помогает.
У меня Visual studio 2008 Pro SP1
P.S.В Delphi 7 привязка формы к проекту осуществлялась через меню File/Use Unit...
В VS я похожево не нащёл.
22.10.08 12:03: Перенесено модератором из 'C/C++' — Кодт
E>Отгадка кроется в переводе этой строки и в элементарных знаниях С++. E>Потрудитесь хоть MSDN открыть и почитать в чем у вас проблема.
Я прекрасно понимаю что я неправильно обращаюсь к элементу нестатической функции, и также я не имею элиментарных представлений по C++, так как я программил до этого на Delphi, там разницы между обращением к главной форме, и обращением к добавленой форме нет никакой. Привязать все добавленные формы к проекту нужно было (как писал ранее) и всё.
А тут я их привязал, я так покрайнемерие думая (писал ранее) И команду Form1::Show(), Она понимает а Form2::Show(), уже всё неправильное...
Я открывал MSDN и вбивал эту ошибку и из множества результатов так и не нащёл пример именно моего случая, так же вбивал эту ошибку в Google...
Пудьте добры подскажите пожалуйста начинающему плюсеру в чём тут у меня ошибка
Здравствуйте, ILYA_INDIGO, Вы писали:
ILY>Дело в том, что при указании действия на кнопку ILY>private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) ILY> {Form2::Show(); ILY> } ILY>Выдаёт ошибку ILY>Error 1 error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function
По-видимому вместо Form2::Show() должно быть что-то вроде form2.Show().
I>По-видимому вместо Form2::Show() должно быть что-то вроде form2.Show().
Я пробывал и Form2.Show() и Form2->Show(), ну тогда проявляется бесмысленная ошибка..
Error 1 error C2143: syntax error : missing ';' before '.' ('->')
Потому как перед . или -> символа ; нету
Здравствуйте, ILYA_INDIGO, Вы писали:
ILY>Я пробывал и Form2.Show() и Form2->Show(), ну тогда проявляется бесмысленная ошибка..
Так я же не случайно написал form2 с маленькой буквы. Тебе не имя класса нужно, а имя переменной (типа Form2). Как уж она у тебя называется, form2 или по-другому, посмотри сам.
Здравствуйте, ILYA_INDIGO, Вы писали:
ILY>Я хочу сделать так, что бы у меня кнопка, находящаяся на 1-ой форме (Form1) открывала 2-ую форму (Form2). (Имя проекта ILYA 2) ILY>Дело в том, что при указании действия на кнопку ILY>private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) ILY> {Form2::Show(); ILY> }
ILY>Выдаёт ошибку ILY>Error 1 error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function
Код в button2_Click должен быть примерно таким:
//Сначала создаем объект Form2;
Form2 frm;//Может быть такой: Form2* frm = new Form2();
//Затем вызываем для созданного объекта нестатическую функцию-член Show
frm.Show();//frm->Show();
...
I>Так я же не случайно написал form2 с маленькой буквы. Тебе не имя класса нужно, а имя переменной (типа Form2). Как уж она у тебя называется, form2 или по-другому, посмотри сам.
Действительно при смене регистра F меняются ошибки...
Я даже такого и не опредставлял...
Файл формы я назвал Form2.h
при form2::Show(); выдаёт error C2653: 'form2' : is not a class or namespace name
При form2.Show(); form2->Show();
Error 1 C2065: 'form2' : undeclared identifier Error 2 C2228: left of '.Show'('->Show') must have class/struct/union
В ILYA 2.cpp и в Form1.h я прописал #include "Form2.h"
Кстати на строку form1::Show(); тоже ругается Error 1 error C2653: 'form1' : is not a class or namespace name
B>Код в button2_Click должен быть примерно таким:
B>
B>//Сначала создаем объект Form2;
B>Form2 frm;//Может быть такой: Form2* frm = new Form2();
B>//Затем вызываем для созданного объекта нестатическую функцию-член Show
B>frm.Show();//frm->Show();
B>...
B>
Спасибо получилось при коде Form2 frm; frm.ShowDialog();
Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
Здравствуйте, ILYA_INDIGO, Вы писали:
B>>Код в button2_Click должен быть примерно таким:
B>>
B>>//Сначала создаем объект Form2;
B>>Form2 frm;//Может быть такой: Form2* frm = new Form2();
B>>//Затем вызываем для созданного объекта нестатическую функцию-член Show
B>>frm.Show();//frm->Show();
B>>...
B>>
ILY>Спасибо получилось при коде Form2 frm; frm.ShowDialog(); ILY>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
Здравствуйте, ILYA_INDIGO, Вы писали:
ILY>Спасибо получилось при коде Form2 frm; frm.ShowDialog();
Ну, я рад
ILY>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
Главное правило — для вызова нестатической функции-члена нужен объект. Как и где его создавать — дело десятое. Можно, как в привенденном примере, по месту, можно сделать его членом главной формы, можно еще как-то — все зависит от ситуации.
ЗЫ
Тебе необходим учебник — заданный вопрос относится к разряду элементарных, и не всегда на форуме найдется человек, которому будет не жалко потратить свое время на разъяснение азбучных истин.
Только без обид
Здравствуйте, placement_new, Вы писали:
_>Здравствуйте, ILYA_INDIGO, Вы писали:
B>>>Код в button2_Click должен быть примерно таким:
B>>>
B>>>//Сначала создаем объект Form2;
B>>>Form2 frm;//Может быть такой: Form2* frm = new Form2();
B>>>//Затем вызываем для созданного объекта нестатическую функцию-член Show
B>>>frm.Show();//frm->Show();
B>>>...
B>>>
ILY>>Спасибо получилось при коде Form2 frm; frm.ShowDialog(); ILY>>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
_>Нет, нужно иметь один обьект.
Хотя...
Все зависит от задачи
Re[3]: Привязка формы к проекту
От:
Аноним
Дата:
22.10.08 08:25
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:
ILY>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
Увы, Илья, Вы пали жертвой черезчур большой "заботы" Delphi. Дело в том, что она автоматом для каждой объявленной в проекте формы
1) объявляет глобальную переменную (посмотрите чуть выше implementation-секции PAS-файла)
2) создает по одному экземпляру каждой формы (загляните в DPR-файл, чтобы убедиться в этом)
При желании, можно (а в боьлших проектах — просто нужно) выключить в настройках такую фичу (называется "Auto create forms & data modules" или как-то так), но глобальные переменные остаются, чистим руками
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, ILYA_INDIGO, Вы писали:
ILY>>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
А>Увы, Илья, Вы пали жертвой черезчур большой "заботы" Delphi. Дело в том, что она автоматом для каждой объявленной в проекте формы
По-моему, человек пал жертвой собственной невнимательности. Это не упрёк, а просто совет — пользоваться хелпом и разбираться.
Фичу Auto-create forms всегда сразу отрубал, когда переставлял Delphi.