Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61

Много файлов, а толку - "0"

05.02.2013, 18:34. Показов 1905. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот разбил код на файлы и теперь непойму где сныкался - error.

sfunc.h
C++
1
2
3
4
5
6
7
8
#ifndef FUNCTION_SNAKE_H
#define FUNCTION_SNAKE_H
 
void initMap(); // èíèöèàëèçàöèÿ êàðòû
void showMap(); // ôóíêöèÿ ðèñóåò êàðòó
void control(const char key, snake &s); // óïðàâëåíèå çìåéêîé
 
#endif // FUNCTION_SNAKE_H
snake.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef SNAKE_H
#define SNAKE_H
 
const int L = 30; // äëèííà
const int W = 20; // øèðèíà
char map[W][L];
 
class snake{
    private:
        int x, y;
        int length;
    public:
        snake(): x(0), y(0), length(0){}
        snake(int xN, int yN, int lN): x(xN), y(yN), length(lN){}
        
        void operator ++(); // îïåðàòîð ïðå-èíêðåìåíòà ïîñûëàåò çìåéêó ââåðõ
        void operator ++(int); // îïåðàòîð ïîñ-èíêðåìåíòà ïîñûëàåò çìåéêó âïðàâî
        void operator --(); // îïåðàòîð ïðå-äåêðåìåíòà ïîñûëàåò çìåéêó âíèç
        void operator --(int); // îïåðàòîð ïîñ-äåêðåìåíòà ïîñûëàåò çìåéêó âëåâî
};
 
#endif // SNAKE_H
snake.cpp
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
#include "snake.h"
 
void snake::operator ++(){
    // îïåðàòîð ïðå-èíêðåìåíòà ïîñûëàåò çìåéêó ââåðõ
    map[y][x] = ' ';
    // ïðîâåðêà âûõîäà çà ãðàíèöû ìàññèâà
    (y == 0)? y = (W - 1): --y;
    map[y][x] = '^';
}
 
void snake::operator ++(int){
    // îïåðàòîð ïîñ-èíêðåìåíòà ïîñûëàåò çìåéêó âïðàâî
    map[y][x] = ' ';
    // ïðîâåðêà âûõîäà çà ãðàíèöû ìàññèâà
    (x == (L - 1))? x = 0: ++x;
    map[y][x] = '>';
}
 
void snake::operator --(){
    // îïåðàòîð ïðå-äåêðåìåíòà ïîñûëàåò çìåéêó âíèç
    map[y][x] = ' ';
    // ïðîâåðêà âûõîäà çà ãðàíèöû ìàññèâà
    (y == (W - 1))? y = 0: ++y;
    map[y][x] = 'v';
}
 
void snake::operator --(int){
    // îïåðàòîð ïîñ-äåêðåìåíòà ïîñûëàåò çìåéêó âëåâî
    map[y][x] = ' ';
    // ïðîâåðêà âûõîäà çà ãðàíèöû ìàññèâà
    (x == 0)? x = (L - 1): --x;
    map[y][x] = '<';
}
main.cpp
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <conio.h>
#include <ctime>
#include <windows.h>
#include <cstdlib>
 
#include "snake.h"
#include "sfunc.h"
 
int main(int argc, char *argv[]){
    
    initMap();
    
    const int i = 200;
    char move = 'd';
    
    snake s;
    while(1){
        showMap();
        Sleep(i);
        
        if(kbhit()){
            move = getch();
        }
        control(move, s);
        
        system("cls");
    }
    
    getch();
    return EXIT_SUCCESS;
}
 
void initMap(){
    // èíèöèàëèçàöèÿ êàðòû
    for(int i=0; i<W; i++){
        for(int j=0; j<L; j++){
            map[i][j] = '.';
        }
    }
}
 
void showMap(){
    // ôóíêöèÿ ðèñóåò êàðòó
    for(int i=0; i<W; i++){
        for(int j=0; j<L; j++){
            std::cout << map[i][j];
        }
        std::cout << std::endl;
    }
}
 
void control(const char key, snake &s){
    // óïðàâëåíèå çìåéêîé
    switch(key){
        case 'w': ++s; break; // ïðå-èíêðåìåíò ïîñûëàåò çìåéêó ââåðõ
        case 'a': s--; break; // ïîñ-äåêðåìåíò ïîñûëàåò çìåéêó âëåâî
        case 's': --s; break; // ïðå-äåêðåìåíò ïîñûëàåò çìåéêó âíèç
        case 'd': s++; break; // ïîñ-èíêðåìåíò ïîñûëàåò çìåéêó âïðàâî
        default: break;
    }
}
Есть предположение что дело в объевлении и опредилении массива...
Но могу ошибаться!

Добавлено через 3 часа 22 минуты
Уважаемые, помогите, листинги не собираются!
Одним файлом *.срр все работает нештяк, а так неполучается.
Так в чем же проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2013, 18:34
Ответы с готовыми решениями:

Слишком много аргументов в вызове функции, или как создать много файлов на рабочем столе?
Мне нужно создать на рабочем столе очень много файлов вот команда для создания 1 файла wchar_t szBuf{ 0 }; ...

Приатачить много файлов.
Всем привет! Вобщем тема следующая. Мне поручили сделать базку в которую буду складиватся файли*txt. Процес В банке есть прога...

GZipStream и много файлов
Всем привет, у меня проблема. Вообщем, наткнулся на класс GZipStream, который преобразует поток данных на входе в .gz файл. Так вот, везде...

27
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,858
06.02.2013, 04:24
Студворк — интернет-сервис помощи студентам
там достаточно (в global.h)
C++
1
2
extern const int x;
extern int arr[];
ему там не надо писать лишнего x, т.к. выделения памяти нет, а размер созданного массива хранится в x
по сути указателя arr и числа x вам хватит с лихвой
1
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 13:01  [ТС]
abit, а двумерный массив будет выгледеть так:

extern int *arr[];

Или я неправ?
Тогда как выгледит объевление без определения двумерного масива, а?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
06.02.2013, 13:23
ой-ой
0
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 13:48  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ой-ой
И что это значит?
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,858
06.02.2013, 15:21
Цитата Сообщение от Вальдемар Посмотреть сообщение
abit, а двумерный массив будет выгледеть так:

extern int *arr[];

Или я неправ?
Тогда как выгледит объевление без определения двумерного масива, а?
вообще

C++
1
extern int arr[][];
но с другой стороны без разницы... вам достаточно лишь указать что это указатель
int arr[] полностью аналогично int * arr
операции [] над указателями - синтаксический сахар и я вчера это подробнее отписывал вот в этой теме - Как из указателя на массив достать конкретное значение массива
0
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 16:53  [ТС]
Да я пробавал такое объевление но, оно непрокатывает.
extern int arr[] - так все нештяк, а так extern int arr[][] - нет.

Добавлено через 5 минут
вот:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//main.cpp
#include "func.h"
 
const int x = 5;
const int y = 10;
int arr[x][y];
 
int main(int argc, char *argv[]){
    
    display();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
//func.h
#ifndef FUNC_H
#define FUNC_H
 
#include <cstdlib>
#include <iostream>
 
#include "global.h"
 
void display();
 
#endif
 
//func.cpp
#include "func.h"
 
void display(){
    for(int i=0; i<x; i++){
        for(int j=0; j<y; j++){
            arr[i][j] = j;
        }
    }
    
    for(int i=0; i<x; i++){
        for(int j=0; j<y; j++){
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
}
 
//global.h
#ifndef GLOBAL_H
#define GLOBAL_H
 
extern const int x;
extern const int y;
extern int arr[][];
 
#endif
Выдает ошибку

Добавлено через 11 минут
Кстати можете сами попробывать скомпилировать код и убедится - программа несобирается!
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
06.02.2013, 17:21
Вальдемар, вы можете сделать так? естественно всё надо по местам расскидать
C++
1
extern int **arr;
C++
1
int **arr;
C++
1
2
3
4
5
    arr = new int *[x];
    for (unsigned int i = 0; i < x ; i ++)
    {
        arr[i] = new int[y];
    }
Добавлено через 3 минуты
обращение обычное, как к двухмерному масиву
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
06.02.2013, 18:06
Цитата Сообщение от Вальдемар Посмотреть сообщение
extern int arr[] - так все нештяк, а так extern int arr[][] - нет.
для объявления двумерного массива придется указать размер, хотя бы второй, например, так:
C++
1
2
3
extern int arr[20][30];
//или так:
extern int arr[][30];
будет работать.

Но тут получаются магические числа. Можно сделать так, в хедере:

C++
1
2
3
const int L = 30; // длина
const int W = 20; // ширина
extern char map[W][L];
А в cpp:
C++
1
char map[W][L];
В итоге правда получится две копии констант в main.cpp и snake.cpp, но конфликтовать они не будут.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2013, 18:06

Слишком много включаемых файлов
(C1014) Main.cpp #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; #include &lt;locale.h&gt; #include...

Добавить много файлов в список
Мне нужно через мою программу открыть много файлов. Как в медиаплеере выделяешь много песен открываешь их, и они добавляются в один...

Вирус заразил много файлов
По своей глупости поймал вирус, пока искал скрипт для игры, могу даже прикрепить архив с этим вирусом если попросите. Как я понял вирус...

Отправка много файлов на PHP
При отправке данных из формы несколько фотографий фотографии загружаются в нужную папку, но имя файла повторяется несколько раз. ...

Флешки не любят много файлов ?
Всем привет. занимаюсь перебивкой виндовсов, и много прог кидаю на флешку, Флешка уже четвертая, как на них стает многовато разных файлов,...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru