Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
alkagolik
Заблокирован
#1

конфликт типов - C++

09.10.2011, 23:00. Просмотров 1681. Ответов 27
Метки нет (Все метки)

пишу себе Си хедер. как реализовать универсальность одной функции для всех типов?
http://www.cyberforum.ru/cpp-beginners/thread1448974.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 23:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос конфликт типов (C++):

Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Буду благодарен! Найти предельные значения для целочисленных типов. Не...

Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов
Разработайте перегружены функции, в которые передаются два параметра типов int...

Конфликт итераторов
Доброго времени суток. Пишу Timsort с использованием шаблонов и итераторов....

Конфликт конструкторов.
Здравствуйте! struct DateTime : tm { DateTime(int year_ = 1970, ...

конфликт имен
пытаюсь вызвать CButton* button= (CButton*)GetDlgItem(IDC_BUTTON); //...

27
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
09.10.2011, 23:02 #2
Перегрузить функцию.
0
alkagolik
Заблокирован
09.10.2011, 23:04  [ТС] #3
например?
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
09.10.2011, 23:10 #4
Пардон. В Си перегрузки нет. Получается что никак.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
10.10.2011, 00:42 #5
alkagolik, void*?
1
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
10.10.2011, 00:44 #6
или макросы
1
alkagolik
Заблокирован
10.10.2011, 01:17  [ТС] #7
void** работает! инициализируется и выводит и удаляется.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
void **create_def(){
    int i, j;
    void **matrix;
 
    matrix = (void **) malloc (my_default_size * sizeof(void*));
    if ( !matrix) exit(__ERROR_CREATE_MEM);
 
    for(i = 0; i != my_default_size; ++i){
        matrix[i] = (void *) malloc(my_default_size * sizeof(void));
        if ( !matrix[i] ) exit(__ERROR_CREATE_MEM);
    }
    return matrix;
}
Цитата Сообщение от alex_x_x Посмотреть сообщение
или макросы
пример можно?

нет. с удалением я тупнул, забыл комментарии снять. не хочет функция в качестве аргумента принимать не void
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
10.10.2011, 01:28 #8
alkagolik, не понял точно, что именно Вы пытаетесь сделать, но посмотрите на стандартные функции такие, как qsort()/calloc()/etc... Стандартная практика передавать типом void* указатель на данные, размер одного элемента и количество элементов...
1
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
10.10.2011, 01:29 #9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _ADD(type) \
type add_ ## type (const type a, const type b) \
{ \
  return ((a) + (b)); \
}
 
#define ADD(type, a, b) (add_ ## type(a, b))
 
_ADD(int);
_ADD(double)
 
int main()
{
   return ADD(int, 1, -1);
}
Добавлено через 52 секунды
чтото вроде, время позднее, ничего умнее в голову не приходит
0
alkagolik
Заблокирован
10.10.2011, 02:15  [ТС] #10
easybudda, а есть вообще где глянуть сорцы сишных функций? realloc(), qsort()...
вот к примеру realloc() может принимать первым параметром любой тип. я же пишу функцию вида
C
1
void func(void **arg1, const size_t arg2)
и компилятор ругается что ему вместо void** подсунули char**
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
10.10.2011, 02:26 #11
Цитата Сообщение от alkagolik Посмотреть сообщение
вместо void** подсунули char**
похоже, что компилируется плюсовым компилятором
0
alkagolik
Заблокирован
10.10.2011, 02:31  [ТС] #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
похоже, что компилируется плюсовым компилятором
gcc + консоль
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
10.10.2011, 02:37 #13
пардон за глупый вопрос, а расширение файла .c?
0
alkagolik
Заблокирован
10.10.2011, 02:42  [ТС] #14
alex_x_x, именно
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
10.10.2011, 02:58 #15
неявно приводить char** к void** нельзя
в самом по себе void** смысла то нет большого
0
alkagolik
Заблокирован
10.10.2011, 03:30  [ТС] #16
alex_x_x, ну суть в том чтобы функция имела возможность принимать аргумент любого типа и с ним работать. Делать несколько дубликатов одной функции как-то неправильно, правильно? простите за тавтологию. вот я ищу способ как в Си написать функцию, которая обработает любой аргумент.

Добавлено через 27 минут
в том числе и собственный структурный тип
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
10.10.2011, 04:03 #17
сделай void *, на него подаёшь char **, внутри функции уже приводишь к нужному
void * гарантирует правильное восстановление указателя, ранее сохранённого в него
1
alkagolik
Заблокирован
10.10.2011, 04:52  [ТС] #18
Цитата Сообщение от accept Посмотреть сообщение
внутри функции уже приводишь к нужному
это как вообще сделать? по ключу duplicate в стандарте С99 попадаю на enum и case

Добавлено через 14 минут
так ну с этим есть. передали, продублировали, но это когда заранее известен тип. или не так?
C
1
2
3
4
void func(void *arg)
{
    char **str = arg;
}
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
10.10.2011, 05:14 #19
тип передаёшь вторым аргументом в виде кода (делаешь enum)
0
alkagolik
Заблокирован
10.10.2011, 05:37  [ТС] #20
не врубаюсь я как константой передать. пойду посплю немного, может просветлеет
0
10.10.2011, 05:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2011, 05:37
Привет! Вот еще темы с решениями:

Конфликт компиляторов
Здравствуйте, я относительно недавно начал программировать, экспериментирую с...

Конфликт имён
Добрый день. При запуске программы возникает следующая ошибка: Сейчас...

Ffmpeg конфликт библиотек
В проекте возникает потребность пользоваться одновременно (или хотя бы...

Конфликт пространств имён
Есть у меня два разных класса, имеющими одно название. И есть другие две...


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

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

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