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

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

Войти
Регистрация
Восстановить пароль
 
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
#1

Неверная передача значения - C++

01.02.2014, 00:43. Просмотров 570. Ответов 22
Метки нет (Все метки)

Есть
C++
1
typedef enum {a, b, c, d} my;
есть функция
C++
1
void MyF(my x)
ее вызов в виде
C++
1
2
MyF(0);
MyF(a);
работает нормально

А вызов в виде
C++
1
2
my temp=a;
MyF(temp);
или

C++
1
2
int temp=1;
MyF(temp);
не работает, почему? То есть компилируется, но значение передается неверное
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
01.02.2014, 00:47     Неверная передача значения #2
klynxe, а почему должно работать?
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 00:52  [ТС]     Неверная передача значения #3
Цитата Сообщение от metaluga145 Посмотреть сообщение
klynxe, а должно работать? у Вас типы данных не совпадают. int это не my, два разных типа. Видимо, при передаче int происходит неявное преобразование.
А вариант
my temp=a;
MyF(temp);
?

Добавлено через 49 секунд
И при вызове MyF(0); как мне передать 0 через переменную?
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
01.02.2014, 00:55     Неверная передача значения #4
вввв
Цитата Сообщение от klynxe Посмотреть сообщение
Есть
typedef enum {a, b, c, d} my;
есть функция void MyF(my x)
ее вызов в виде
MyF(0);
MyF(a);
работает нормально

А вызов в виде
my temp=a;
MyF(temp);

или

int temp=1;
MyF(temp);

не работает, почему? То есть компилируется, но значение передается неверное
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
01.02.2014, 00:55     Неверная передача значения #5
И что ты ожидаешь на выходе? Что делает функция? Может ты от неё не того результата ожидаешь?
Avazart
7062 / 5239 / 261
Регистрация: 10.12.2010
Сообщений: 23,036
Записей в блоге: 17
01.02.2014, 00:57     Неверная передача значения #6
Цитата Сообщение от klynxe Посмотреть сообщение
C++
1
typedef enum {a, b, c, d} my;
Зачем тебе typedef ?

C++
1
2
enum MyEnumType{a, b, c, d};
MyEnumType MyEnumVar;
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:01  [ТС]     Неверная передача значения #7
Цитата Сообщение от Avazart Посмотреть сообщение
Зачем тебе typedef ?
Да мне он и не нужен, это файл БД с таким описанием...
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:02     Неверная передача значения #8

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Зачем тебе typedef ?
наследие си?


klynxe, конкретный код приведите. int не конвертится в enum.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:02  [ТС]     Неверная передача значения #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И что ты ожидаешь на выходе? Что делает функция? Может ты от неё не того результата ожидаешь?
У меня после выполнения этой функции описанными выше вариантами (первыми 2) нормально все работает (вторыми 2) БД вырубается
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:03     Неверная передача значения #10
Цитата Сообщение от klynxe Посмотреть сообщение
И при вызове MyF(0); как мне передать 0 через переменную?
Вероятно должно быть:
C++
1
2
MyF( a );
MyF( my::a ); // C++11
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:11  [ТС]     Неверная передача значения #11
Цитата Сообщение от Tulosba Посмотреть сообщение
klynxe, конкретный код приведите. int не конвертится в enum.
C++
1
2
3
4
5
typedef enum {
    ddlChar, ddlUChar, ddlWChar, ddlInt16, ddlUInt16, ddlInt32, ddlUInt32,
    ddlInt64, ddlUInt64, ddlFloat, ddlDouble, ddlDB_ADDR, ddlBLOB, ddlStruct,
    ddlInt8, ddlUInt8, ddlDate, ddlTime, ddlTimestamp, ddlBCD
} DDL_FIELD_TYPE;
прототип функции
C++
1
2
int16 ddlCreateField(HDDL hRec, const char *name, DDL_FIELD_TYPE type, 
const uint16 *dims, const char *cmpfcn, HDDL *hField)
речь идет о параметре DDL_FIELD_TYPE type
вызов
C++
1
ddlCreateField(hddlRec, "long_fld", ddlLong, NULL, NULL, &hfld2);
работает нормально так же как
C++
1
ddlCreateField(hddlRec, "long_fld", 0, NULL, NULL, &hfld2);
в мне надо этот параметр передать в переменной
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:16     Неверная передача значения #12
Цитата Сообщение от klynxe Посмотреть сообщение
C++
1
ddlCreateField(hddlRec, "long_fld", 0, NULL, NULL, &hfld2);
в каком компиляторе это у вас работает?
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:18  [ТС]     Неверная передача значения #13
Цитата Сообщение от Tulosba Посмотреть сообщение
Цитата Originally Posted by klynxe View Post
И при вызове MyF(0); как мне передать 0 через переменную?
Вероятно должно быть:
Код C++
1
2
MyF( a );
MyF( my::a ); // C++11
А переменную какого типа создать?

Добавлено через 42 секунды
Цитата Сообщение от Tulosba Посмотреть сообщение
каком компиляторе это у вас работает?
билдер 2006
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:22     Неверная передача значения #14
Цитата Сообщение от klynxe Посмотреть сообщение
А переменную какого типа создать?
типа, которого enum:
C++
1
2
DDL_FIELD_TYPE type = ddlDouble;
ddlCreateField(hddlRec, "long_fld", type, NULL, NULL, &hfld2);
Добавлено через 2 минуты
Цитата Сообщение от klynxe Посмотреть сообщение
билдер 2006
Может быть Builder6 ? Хотя 2006 вроде тоже есть, судя по вики.
В любом случае, int не должен конвертиться (тем более неявно) в enum.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:25  [ТС]     Неверная передача значения #15
Цитата Сообщение от Tulosba Посмотреть сообщение
DDL_FIELD_TYPE type = ddlDouble; ddlCreateField(hddlRec, "long_fld", type, NULL, NULL, &hfld2);
Не работает, пробовал...
Цитата Сообщение от Tulosba Посмотреть сообщение
Builder6
А не одно и тоже разве? Я думаю это типа 6 билдер в 2006 году, не?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:28     Неверная передача значения #16
Цитата Сообщение от klynxe Посмотреть сообщение
Я думаю это типа 6 билдер в 2006 году, не?
http://ru.wikipedia.org/wiki/C%2B%2B_Builder
6ой был в 2002 году.
Цитата Сообщение от klynxe Посмотреть сообщение
Не работает, пробовал...
Конкретнее. Текст ошибки какой?
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:38  [ТС]     Неверная передача значения #17
Ошибку не выдает

эта функция идет внутри транзакции БД
А вот по ее завершении (транзакции) БД вырубается, если переменную отправлять, а так все норм

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Цитата Originally Posted by klynxe View Post
Я думаю это типа 6 билдер в 2006 году, не?
http://ru.wikipedia.org/wiki/C%2B%2B_Builder
6ой был в 2002 году.
Буду знать, никогда не обращал внимания
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:38     Неверная передача значения #18
Цитата Сообщение от klynxe Посмотреть сообщение
А вот по ее завершении (транзакции) БД вырубается,
Надо смотреть доку на БД в таком случае.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
01.02.2014, 01:42  [ТС]     Неверная передача значения #19
Цитата Сообщение от Tulosba Посмотреть сообщение
Надо смотреть доку на БД в таком случае.
А что там хоть искать?
И все равно с точки зрения оправки, чем отличается когда я пишу
C++
1
ddlCreateField(hddlRec, "long_fld", ddlLong, NULL, NULL, &hfld2);
и так
C++
1
2
DDL_FIELD_TYPE type = ddlDouble;
ddlCreateField(hddlRec, "long_fld", type, NULL, NULL, &hfld2);
Что я в первом случае передаю? У меня переменной ddlLong вообще нет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 01:48     Неверная передача значения
Еще ссылки по теме:

Передача значения в asm вставку C++
Передача аргументов в функцию и возврат значения C++
C++ Передача значения переменной в IplImage
Передача значения в функцию C++
C++ Передача значения в функцию

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.02.2014, 01:48     Неверная передача значения #20
Цитата Сообщение от klynxe Посмотреть сообщение
А что там хоть искать?
Описание функции ddlCreateField для начала.
Цитата Сообщение от klynxe Посмотреть сообщение
чем отличается
Отличается тем, что в первом случае третьим параметром передается ddlLong, а во втором случае ddlDouble. Откуда у вас ddlLong, я, честно говоря, не понял, т.к. здесь
C++
1
2
3
4
5
typedef enum {
    ddlChar, ddlUChar, ddlWChar, ddlInt16, ddlUInt16, ddlInt32, ddlUInt32,
    ddlInt64, ddlUInt64, ddlFloat, ddlDouble, ddlDB_ADDR, ddlBLOB, ddlStruct,
    ddlInt8, ddlUInt8, ddlDate, ddlTime, ddlTimestamp, ddlBCD
} DDL_FIELD_TYPE;
его нет.
Yandex
Объявления
01.02.2014, 01:48     Неверная передача значения
Ответ Создать тему
Опции темы

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