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

Передача параметров в функцию - C++

Восстановить пароль Регистрация
 
miragex
1 / 1 / 0
Регистрация: 11.07.2012
Сообщений: 123
06.01.2013, 22:48     Передача параметров в функцию #1
Добрый вечер
Не получается передать в функцию массив
выдает ошибку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <cstdio>
 
struct morse_code
{
    const char* morse;
    char symbol;
};
 
struct morse_code morse_char[] = 
{
    {".-",    'a'},
    {"-...",  'b'},
    {"-.-.",  'c'},
    {"-..",   'd'},
    {".",     'e'}
};
 
void MorseOut(char array);
 
main()
{
    int i = 3
    MorseOut(morse_char[i])
    return 0;     
}
 
void MorseOut(char array)
{
   printf("%c %s", array.symbol, array.morse);
}
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2013, 22:48     Передача параметров в функцию
Посмотрите здесь:

C++ Передача параметров в функцию
C++ Передача параметров в функцию
C++ передача параметров в функцию
C++ Передача параметров в функцию
Передача параметров в функцию по адресу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
06.01.2013, 23:22     Передача параметров в функцию #2
По твоему коду получается, что ты передаешь элемент Array типа char, а чтобы передать массив, надо написать
void MorseOut(char *array)
miragex
1 / 1 / 0
Регистрация: 11.07.2012
Сообщений: 123
06.01.2013, 23:34  [ТС]     Передача параметров в функцию #3
По твоему коду получается, что ты передаешь элемент Array типа char, а чтобы передать массив, надо написать
void MorseOut(char *array)
Исправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <cstdio>
 
struct morse_code
{
    const char* morse;
    char symbol;
};
 
struct morse_code morse_char[] = 
{
    {".-",    'a'},
    {"-...",  'b'},
    {"-.-.",  'c'},
    {"-..",   'd'},
    {".",     'e'}
};
 
void MorseOut(char *array);
 
main()
{
    int i = 3
    MorseOut(morse_char[i])
    return 0;     
}
 
void MorseOut(char *array)
{
   printf("%c %s", array.symbol, array.morse);
}
Пишет ошибки:
In function `void MorseOut(char*)':
68 cannot convert `morse_code' to `char*' for argument `1' to `void MorseOut(char*)'
85 `symbol' has not been declared
85 request for member of non-aggregate type before ',' token
85 `morse' has not been declared
85 request for member of non-aggregate type before ')' token
Nagdiel
 Аватар для Nagdiel
114 / 114 / 3
Регистрация: 23.12.2012
Сообщений: 195
07.01.2013, 00:10     Передача параметров в функцию #4
Помоему должно быть так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <cstdio>
 
struct morse_code
{
    const char* morse;
    char symbol;
};
 
morse_code morse_char[] = 
{
    {".-",    'a'},
    {"-...",  'b'},
    {"-.-.",  'c'},
    {"-..",   'd'},
    {".",     'e'}
};
 
void MorseOut(morse_code code);
 
int main()
 
{
    int i = 3;
    MorseOut(morse_char[i]);
    getchar();
    return 0;     
}
 
void MorseOut(morse_code code)
{
    printf("%c %s", code.symbol, code.morse);
}
А еще лучше
C++
1
void MorseOut(const morse_code& code)
Добавлено через 21 минуту
miragex,
в вашем случае, если я правильно понял задачу, в функцию MorseOut следовало передавать не массив, а отдельный символ.

Вот вариант кода, который печатает всю таблицу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdafx.h>
#include <cstdio>
 
struct morse_code
{
    const char* morse;
    char symbol;
};
 
morse_code morse_char[] = 
{
    {".-",    'a'},
    {"-...",  'b'},
    {"-.-.",  'c'},
    {"-..",   'd'},
    {".",     'e'}
};
 
void printMorseTable(morse_code* const CodeTable, const int TableLength);
 
int main()
{
    printMorseTable(morse_char, 5);
    getchar();
    return 0;     
}
 
void printMorseTable(morse_code* const CodeTable, const int TableLength)
{
    for (int i=0; i<TableLength; i++)
        printf("%c %s \n", CodeTable[i].symbol, CodeTable[i].morse);
}
miragex
1 / 1 / 0
Регистрация: 11.07.2012
Сообщений: 123
07.01.2013, 00:34  [ТС]     Передача параметров в функцию #5
Цитата Сообщение от Nagdiel Посмотреть сообщение
void printMorseTable(morse_code* const CodeTable, const int TableLength)
Поясни пожалуйста как это понять morse_code* const CodeTable
и почему const int TableLength а не просто int TableLength

Спасибо
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 00:39     Передача параметров в функцию #6
C++
1
void printMorseTable(morse_code* const CodeTable, const int TableLength)
константные это для того, чтобы аргументы в теле функции не смогли поменять.
сигнатуры функции при этом вроде бы такие же, как и в случае неконстантных аргументов. хотя могу ошибаться.
ну и если быть до конца параноиком, то нужно передавать константный указатель на константу, чтобы не только указатель не менялся, но и то, на что он указывает:
C++
1
void printMorseTable(const morse_code* const CodeTable, const int TableLength)
ну и более встречаемый вариант:
C++
1
void printMorseTable(const morse_code* CodeTable, int TableLength)
Nagdiel
 Аватар для Nagdiel
114 / 114 / 3
Регистрация: 23.12.2012
Сообщений: 195
07.01.2013, 00:46     Передача параметров в функцию #7
DU, спасибо, что напомнили вариант
C++
1
void printMorseTable(const morse_code* const CodeTable, const int TableLength)
Цитата Сообщение от DU Посмотреть сообщение
и если быть до конца параноиком
Да,да... это верно, но указывая const, не только себя страхуем, а еще показываем другим программистам, которые будут использовать эту функцию, что она не изменит данные.
miragex
1 / 1 / 0
Регистрация: 11.07.2012
Сообщений: 123
07.01.2013, 00:50  [ТС]     Передача параметров в функцию #8
Правильно я Вас понял:
Если мы хотим передать в функцию массив то надо написать
Код
void Funktion(const Array* const ArrayFunct)
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 00:51     Передача параметров в функцию #9
C++
1
void printMorseTable(morse_code* const CodeTable, const int TableLength)
такой вариант как раз таки ничего не показывает относительно неизменяемости того, на что указывает указатель.
поэтому нужно так:
C++
1
void printMorseTable(const morse_code* CodeTable, int TableLength)
ну а докидывание констант к аргументам - это я редко где встречал.

Правильно я Вас понял:
Если мы хотим передать в функцию массив то надо написатьКод Code
void Funktion(const Array* const ArrayFunct)
помимо указателя на начало массива, нужно еще и размер массива передавать.
со строчками это не делается, т.к. там конец массива определяется нулевым символом. для массивов других типов нужно размер еще передавать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 00:55     Передача параметров в функцию
Еще ссылки по теме:

Передача параметров в функцию C++
C++ Передача параметров в функцию
Передача параметров в функцию C++

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

Или воспользуйтесь поиском по форуму:
Nagdiel
 Аватар для Nagdiel
114 / 114 / 3
Регистрация: 23.12.2012
Сообщений: 195
07.01.2013, 00:55     Передача параметров в функцию #10
Это справедливо, если ArrayFunct массив элементов типа Array и данные не будут меняться внутри функции
Yandex
Объявления
07.01.2013, 00:55     Передача параметров в функцию
Ответ Создать тему
Опции темы

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