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

Ошибка в передаче знач-й функции - C++

Восстановить пароль Регистрация
 
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
31.12.2012, 21:18     Ошибка в передаче знач-й функции #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
31
32
33
34
35
36
#include <stdio.h>
 
void dfs(int n, int **g, int v, int *used)
{
    if(used[v]) return;
 
    used[v] = 1; // ставим метку, что посетили данную вершину
    for(int i = 0; i < n; i++) // проходим по все ребрам
    {
        if(g[v][i] && !used[i]) // смотрим были ли мы в вершине раньше  можем ли туда попасть
        {
            dfs(n, g, i, used); // если нет, то запускаемся из нее
        }
    }
}
 
int main()
{
    int g[8][8] = {0};
    int used[8] = {0}; // массив меток
    g[0][1] = 1;
    g[1][2] = 1;
    g[1][3] = 1;
    g[1][5] = 1;
    g[3][4] = 1;
    g[5][6] = 1;
    g[5][7] = 1;
 
    int a;
    scanf("%d", &a);
    dfs(8, g, a, used);
 
    for(int i = 0; i < 8; i++) if(used[i]) printf("%d ", i);
 
    return 0;
}
Собсна, ругается тут:
C++
1
dfs(8, g, a, used);
Где ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 21:21     Ошибка в передаче знач-й функции #2
Цитата Сообщение от Bacaramba Посмотреть сообщение
Где ошибка?
Во-вором параметре.
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
31.12.2012, 21:25  [ТС]     Ошибка в передаче знач-й функции #3
<<
\Desktop\#2.cpp|31|error: cannot convert 'int (*)[8]' to 'int**' for argument '2' to 'void dfs(int, int**, int, int*)'|
>>

Ээ, я знаю, переформулирую вопрос: как исправить / что я не так делаю (поподробнее, пож-та, чем "непр-но прис-ешь значение 2 параметра")?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 21:31     Ошибка в передаче знач-й функции #4
Bacaramba, так Вам же компилятор почти по-руски сказал.

Я бы так объявил
C++
1
void dfs(int n, int g[][8], int v, int *used)
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
31.12.2012, 21:38  [ТС]     Ошибка в передаче знач-й функции #5
Не, ну что это такое.. А нельзя как-нибудь добавить гибкость в моменте <<int g[][8]>> - надо не только для 8? Для n надо.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 21:41     Ошибка в передаче знач-й функции #6
Цитата Сообщение от Bacaramba Посмотреть сообщение
Не, ну что это такое.. А нельзя как-нибудь добавить гибкость в моменте <<int g[][8]>> - надо не только для 8? Для n надо.
Нет. Компилятор должен знать, на сколько частей делить массив. Я предлагаю использовать динамический массив, тогда можно передавать как указатель на указатель(как у Вас было). Или передавать как одномерный массив. Еще есть варианты, просто я не понимаю, чего вы хотите.
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
31.12.2012, 21:43  [ТС]     Ошибка в передаче знач-й функции #7
Я хочу, что бы я мог передать функции массив любой длины. За 1 раз.


Без динамического массива никак?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 21:55     Ошибка в передаче знач-й функции #8
Цитата Сообщение от Bacaramba Посмотреть сообщение
Я хочу, что бы я мог передать функции массив любой длины. За 1 раз.
Цитата Сообщение от Bacaramba Посмотреть сообщение
Без динамического массива никак?
Любой каприз
C++
1
2
template<typename T>
void Print(T arr)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
template<typename T>
void Print(T arr)
{
   std::cout << arr[0][1] << std::endl;
}
 
int main()
{
   int arr[2][3] = 
   {
      {
         1, 2, 3
      },
      {
         4, 5, 6
      },
   };
   Print(arr);
}
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
31.12.2012, 21:56     Ошибка в передаче знач-й функции #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void dfs(int n, int **g, int v, int *used)
{
 
}
 
 
 
int **g = new int*[8];
for (int i=0; i<8; i++)
    g[i] = new int[8];
 
int used[8] = {0};
int a;
 
dfs(8, g, a, used);
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 22:16     Ошибка в передаче знач-й функции #10
v.a.l.i.d,
Цитата Сообщение от Bacaramba Посмотреть сообщение
Без динамического массива никак?
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
31.12.2012, 22:23     Ошибка в передаче знач-й функции #11
можно без динамического массива)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int N = 8;
 
void dfs(int n, int g[][N], int v, int *used)
{
 
}
 
 
 
int g[N][N];
int used[N] = {0};
int a;
 
dfs(N, g, a, used);
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
31.12.2012, 22:36  [ТС]     Ошибка в передаче знач-й функции #12

Ну лана, спасибо вам. Токо подвох... Чую подвох...
go
31.12.2012, 22:42
  #13

Не по теме:

Bacaramba, а может ну его программировать. Вам столько вариантов написали, а вы так и не знаете, что вам надо. Бросайте это дело.

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
31.12.2012, 22:55     Ошибка в передаче знач-й функции #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void dfs(int n, int **g, int v, int *used)
{
 
}
 
 
int data[64]; 
int *arr[8];
for (int i=0; i<8; i++)
    arr[i] = data+i*8;
int used[8] = {0};
int a;
 
dfs(8, arr, a, used);
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
01.01.2013, 15:29  [ТС]     Ошибка в передаче знач-й функции #15
Цитата Сообщение от go Посмотреть сообщение

Не по теме:

Bacaramba, а может ну его программировать. Вам столько вариантов написали, а вы так и не знаете, что вам надо. Бросайте это дело.

Не по теме:

Вы наверное хотели пошутить, а написали идиотизм.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2013, 15:46     Ошибка в передаче знач-й функции
Еще ссылки по теме:

Ошибка при передаче результата функции C++
C++ Ошибка при передаче в функцию
C++ Где ошибка в передаче указателя на массив?

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

Или воспользуйтесь поиском по форуму:
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
01.01.2013, 15:46     Ошибка в передаче знач-й функции #16
Bacaramba, не обращайте внимание, изучайте программирование.
А все варианты они рабочие и никакого подвоха тут нет.
С Новым годом
Yandex
Объявления
01.01.2013, 15:46     Ошибка в передаче знач-й функции
Ответ Создать тему
Опции темы

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