| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > правильный вызов функции |
| Автор: gutalin93 1.7.2013, 18:05 | ||
| здравствуйте, подскажите пожалуйста как правильно из обработчика кнопки ( находится в Form1.h) вызвать код из основного .срр файла (допустим функцию main)? среда microsoft visual c++ 2010 когда пишу просто
пишет что new_func: идентификатор не найден сейчас весь код у меня написан в обработчике кнопки в файле Form1.h, это заказчика бесит) |
| Автор: akizelokro 1.7.2013, 22:42 |
| Я не знаю, можно ли вообще вызвать в managed- или смешанном С++ коде функцию main. предполагаю, что нет (я вообще не особо лихой специалист). Но суть стиля программирования в С++ заключается в том, что в include файлах (.h,.hpp) ты пишешь объявления функций и классов, а определения функций уже в c++ файлах. Функцию ты можешь вызвать только тогда, когда она есть у тебя в поле видимости (хотя бы объявление функции предшевствует её использованию). И тут тебя не обрадую. Функция main это особая функция, которую я не видел, чтобы где-то в традиционном C++ объявляли в .hpp файле. ДА и заказчик, скорее всего, хотел тебе намекнуть, чтобы ты в .hpp оставил объявления функций и классов, а реализацию перенес в .cpp файл. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51d19ade6ccc192c43000002#findElement_E7045_51d1db936ccc1972740000bb_0 |
| Автор: dzaraev 2.7.2013, 09:25 | ||||||
Как уже упомянули - реализующий код пишется в .cpp, в .h соответственно - код объявляющий. Советую сделать - как просит заказчик, не показывайте свою некомпетентность. Значит компилятор, обрабатывая ваш .h файл не нашел - где объявлен метод new_func. Необходимо подключить к сборке с формой сборку в которой объявлен new_func и в файле с формой подключить соответствующий неймспейс (using ) или .h файл (#include) Функцию Main, кстати можно спокойно вызвать: Main.cpp
FooHeader.h
Фишка Main функции в том, что её вызов помещается в PE заголовок (для .NET сборок соответственно в CLR заголовок), чтобы обозначить точку входа для модуля. В остальном - обычная функция. |
| Автор: gutalin93 3.7.2013, 14:22 | ||
| спасибо большое, действительно ничего сложного теперь обращаюсь и к main и к др функциям, как-то так: сначала объявление, потом вызов
непонятно правда зачем ^ нужен |
| Автор: dzaraev 3.7.2013, 15:57 | ||
| Насколько знаю, символ ^ - идентифицирует reference тип CLR. Если же используется value-тип, то ^ не ставится. Например, в обозначении типа
тип http://msdn.microsoft.com/en-us/library/system.array.aspx - ссылочный (reference-type) CLR тип, поэтому справа от него ставится "^", а тип http://msdn.microsoft.com/en-us/library/system.byte.aspx - это значимый тип (value-type), поэтому рядом с ним "^" не указывается. |
| Автор: gutalin93 4.7.2013, 12:33 |
| спасибо, последний вопрос...честно говоря до сих пор к некоторым вещам си++ не могу привыкнуть, например пришел мне массив типа unsigned char, даже элементарно не получается один символ в переменную unsigned char записать, не говоря уже о приведении типов, не понятно почему.... пробовал по этой статье http://cppstudio.com/spravochnik/sintaksis-yazyka-s-spravochnaya-informaciya/privedenie-tipov-dannyx/ |
| Автор: gambit 4.7.2013, 14:42 |
| Модератор: Пожалуйста, один топик - один вопрос. |
| Автор: dzaraev 5.7.2013, 08:16 |
| gutalin93, На счет чистого С++ я затрудняюсь ответить, потому, что не понимаю в чем конкретно проблема. Судя по предыдущим постам, вы всёже пишете на C++\CLI (это другой язык, не эквивалентный C++). И, тем не менее, мне не понятен вопрос. На всякий случай - вот пример копирования из нативного массива unsigned char* в массив элементов эквивалентного CLR типа - System::Byte: http://stackoverflow.com/a/6541406 Еще, тоже на всякий пожарный - таблица соответствия нативных типов - типам CLR: http://msdn.microsoft.com/ru-ru/library/0wf2yk2k.aspx |