Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильный вызов функции 
:(
    Опции темы
gutalin93
Дата 1.7.2013, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 1.6.2013

Репутация: нет
Всего: нет



здравствуйте, подскажите пожалуйста как правильно из обработчика кнопки ( находится в Form1.h) вызвать код из основного .срр файла (допустим функцию main)? среда microsoft visual c++ 2010

когда пишу просто 

Код

public: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
             {main();
                          new_func();
                          }


пишет что  new_func: идентификатор не найден

сейчас весь код у меня написан в обработчике кнопки в файле Form1.h, это заказчика бесит)
PM MAIL   Вверх
akizelokro
Дата 1.7.2013, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Я не знаю, можно ли вообще вызвать в managed- или смешанном С++ коде функцию main. предполагаю, что нет (я вообще не особо лихой специалист).
Но суть стиля программирования в С++ заключается в том, что в include файлах (.h,.hpp) ты пишешь объявления функций и классов, а определения функций уже в c++ файлах.
Функцию ты можешь вызвать только тогда, когда она есть у тебя в поле видимости (хотя бы объявление функции предшевствует её использованию). И тут тебя не обрадую. Функция main это особая функция, которую я не видел, чтобы где-то в традиционном C++ объявляли в .hpp файле.

ДА и заказчик, скорее всего, хотел тебе намекнуть, чтобы ты в .hpp оставил объявления функций и классов, а реализацию перенес в .cpp файл.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
EgoBrain
Дата 2.7.2013, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: 1
Всего: 2



Цитата(akizelokro @  1.7.2013,  22:42 Найти цитируемый пост)
Функция main это особая функция, которую я не видел, чтобы где-то в традиционном C++ объявляли в .hpp файле.

Может он в качестве входной точки указал другую функцию и написал еще main для обфускации..

Цитата(gutalin93 @  1.7.2013,  18:05 Найти цитируемый пост)
сейчас весь код у меня написан в обработчике кнопки в файле Form1.h

Как тебе и сказали, реализация должна быть в cpp файле.
PM MAIL ICQ Skype   Вверх
dzaraev
Дата 2.7.2013, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: 1
Всего: 1



Цитата(gutalin93 @  1.7.2013,  18:05 Найти цитируемый пост)
здравствуйте, подскажите пожалуйста как правильно из обработчика кнопки ( находится в Form1.h) вызвать код из основного .срр файла...
...сейчас весь код у меня написан в обработчике кнопки в файле Form1.h, это заказчика бесит) 

Как уже упомянули - реализующий код пишется в .cpp, в .h соответственно - код объявляющий. Советую сделать - как просит заказчик, не показывайте свою некомпетентность.

Цитата(gutalin93 @  1.7.2013,  18:05 Найти цитируемый пост)
пишет что  new_func: идентификатор не найден

Значит компилятор, обрабатывая ваш .h файл не нашел - где объявлен метод new_func. Необходимо подключить к сборке с формой сборку в которой объявлен new_func и в файле с формой подключить соответствующий неймспейс (using ) или .h файл (#include)

Функцию Main, кстати можно спокойно вызвать:
Main.cpp
Код


#include "stdafx.h"
#include "FooHeader.h"
using namespace System;

int main(array<System::String ^> ^args)
{
    if (args.Length == 0)
    {
        callMain();
    }
    else
    {
        Console::WriteLine(args[0]);
        Console::ReadKey();
    }
    return 0;
}

void callMain()
{
    array<String ^> ^args = gcnew array<String^>{"Hello World!"};
    main(args);    
}


FooHeader.h
Код

void callMain();


Фишка Main функции в том, что её вызов помещается в PE заголовок (для .NET сборок соответственно в CLR заголовок), чтобы обозначить точку входа для модуля. В остальном - обычная функция.

Это сообщение отредактировал(а) dzaraev - 2.7.2013, 10:21
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
gutalin93
Дата 3.7.2013, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 1.6.2013

Репутация: нет
Всего: нет



спасибо большое, действительно ничего сложного теперь обращаюсь и к main и к др функциям,
как-то так:
сначала объявление, потом вызов

Код

array <System::Byte>^ onClick(char address_h, char address_l);
..............
onClick(0x09,0xFA);


непонятно правда зачем ^ нужен
 
PM MAIL   Вверх
dzaraev
Дата 3.7.2013, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: 1
Всего: 1



Насколько знаю, символ ^ - идентифицирует  reference тип CLR.
Если же используется value-тип, то ^ не ставится. 
Например, в обозначении типа 
Код

array <System::Byte>^ 

тип array<> - ссылочный (reference-type) CLR тип, поэтому справа от него ставится "^",
а тип System::Byte - это значимый тип (value-type), поэтому рядом с ним "^" не указывается.




Это сообщение отредактировал(а) dzaraev - 3.7.2013, 16:00
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
gutalin93
Дата 4.7.2013, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 1.6.2013

Репутация: нет
Всего: нет



спасибо, последний вопрос...честно говоря до сих пор к некоторым вещам си++ не могу привыкнуть, например пришел мне массив типа unsigned char, даже элементарно не получается один символ в переменную unsigned char записать, не говоря уже о приведении типов, не понятно почему....
пробовал по этой статье
http://cppstudio.com/spravochnik/sintaksis...e-tipov-dannyx/
PM MAIL   Вверх
gambit
Дата 4.7.2013, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Модератор: Пожалуйста, один топик - один вопрос.
PM MAIL ICQ Skype   Вверх
dzaraev
Дата 5.7.2013, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: 1
Всего: 1



gutalin93, На счет чистого С++ я затрудняюсь ответить, потому, что не понимаю в чем конкретно проблема.
Судя по предыдущим постам, вы всёже пишете на C++\CLI (это другой язык, не эквивалентный C++).
И, тем не менее, мне не понятен вопрос. На всякий случай - вот пример копирования из нативного массива unsigned char* в массив элементов эквивалентного CLR типа - System::Byte: http://stackoverflow.com/a/6541406
Еще, тоже на всякий пожарный - таблица соответствия нативных типов - типам CLR: http://msdn.microsoft.com/ru-ru/library/0wf2yk2k.aspx

Это сообщение отредактировал(а) dzaraev - 5.7.2013, 08:17
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.