Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.73
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
#1

Переопределение типа(typedef) - C++

07.10.2010, 08:48. Просмотров 5290. Ответов 5
Метки нет (Все метки)

Не как не могу разобраться что такое StartDLL/Startup в данном случае

C++
1
2
3
typedef void (*Startup)();
 
Startup StartDll;
Можете записать то, что выше без typedef ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 08:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переопределение типа(typedef) (C++):

Определение типа через typedef - C++
То-ли я пересидел, то-ли я просто этого не знаю, но все же. Через typedef определить 1) массив из 7 указателей на целые числа. Как не...

Переопределение типа - C++
В windows.h все типы имеют переопределения вида LONG, UCHAR и так далее. Понятно, что это обычные типы long и unsigned char, но вот в чем...

Как правильно пользоваться typedef для декларации типа указателя на функцию? - C++
Мне нужны будут функции, принимающие параметр-указатель на функции с одним и тем же списком параметров и возвращаемым типом. Как правильно...

Как грамотно нтерпретировать ввод нового имени типа, введённого typedef - C++
Друзья! Дело в том, что вот такой вот код: typedef char (*char6) ; И он значит, что char6 есть указатель на строку из шести...

Переопределение типа class - C++
Подскажите в чем ошибка??? Не могу никак разобраться. "Ошибка 1 error C2011: zvetnik: переопределение типа...

visual studio 2012 - ошибка "переопределение типа" - C++
имею head.h #include <stdio.h> #include <iostream> #include <Windows.h> #pragma comment(lib, "ws2_32") using namespace...

5
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.10.2010, 11:25 #2
для C++ пустые скобки - это типа void
для C - это старый стиль объявлений (до 89 года)

C++
1
void (*StartDll)();
это указатель на функцию, принимающую void, возвращающую void
чтобы каждый раз это дело не писать, эта штука упрощается
ещё на её основе можно делать ещё более сложные типы, в которых, если делать их вручную, можно запутаться
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
07.10.2010, 11:28 #3
typedef void (*Startup)(); //определение типа: указателя на функцию.

Startup StartDll; //создания указателя на функцию.

указателю StartDll можно присвоить адрес функции: имеющей прототип описанный в определении
типа указателя.

Если StartDll хранит адрес функции, то функцию через него можно вызывать(косвенно).

Прмер использования:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
typedef void (*Startup)();
 
void f(){cout<<"Hello\n";}         //реализация функции f.
 
int main(){
Startup StartDll = f;                //записываем адрес функции
StartDll();                             //вызываем функцию через указатель.
system("pause");
return 0;
}
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
07.10.2010, 12:11 #4
Терминологически typedef - это не переопределение типа, и даже не определение типа :-) Более точно, typedef создает синоним для чего-то. В данном случае, читается так: "Startup является синонимом для указателя на функцию, не принимающую никаких аргументов, и возвращающую void."
1
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
07.10.2010, 12:50  [ТС] #5
2Genius Ignat

Не могли бы вы записать тоже самое без typedef ?
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
07.10.2010, 13:06 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
void (*Startup)();
 
void f(){cout<<"Hello\n";}        
 
int main(){
Startup = f;              
Startup();                           
system("pause");
return 0;
}
0
07.10.2010, 13:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2010, 13:06
Привет! Вот еще темы с ответами:

Двусвязный список - Error C2011: ElementsList: переопределение типа "struct" - C++
Что я сделал не правильно? typedef struct ElementsList { struct ElementsList *Prev; struct ElementsList *Next; ...

Переопределение оператора "меньше" пользовательского типа для работы с set - C++
Понимаю, что чтобы хранить в set элементы некоторого класса, нужно переопределить оператор &lt; для этого класса. Оператор переопределен,...

C2011 переопределение типа "enum" RFMapTool c:\dxsdk\include\d3d8types.h - C++
Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка C2011 _D3DZBUFFERTYPE: переопределение типа...

Ошибка "error C2011: переопределение типа" - C++
struct Tunit { public : int team; int team_agricultural; POINT location; POINT moveLocation; float max_helf; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru