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

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

Войти
Регистрация
Восстановить пароль
 
 
Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
#1

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

05.02.2013, 18:34. Просмотров 932. Ответов 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 минуты
Уважаемые, помогите, листинги не собираются!
Одним файлом *.срр все работает нештяк, а так неполучается.
Так в чем же проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 18:34     Много файлов, а толку - "0"
Посмотрите здесь:

"Записать много чисел в одну ячейку массива" - C++
Добрый день, у нас есть ячейка в массиве, размером 4 байта. Мы считываем файл, и нужно по очереди записывать все байты в массив. Когда я...

Ошибка "Слишком много аргументов в вызове функции" - C++
bool FillMatrix::fillTrim() { int d,ky,h,m; n++; ky=n*n*n; m = n; while (m!=0) { d=m%10; ...

Много ошибок типа "syntax error: identifier" - C++
У меня проект из пяти файликов (4 срр и 4 хэдера), ну и main. После того, как перебросил все заголовочные файлы в include &quot;stdafx.&quot;...

Ошибка "Слишком много аргументов в вызове функции" - C++
Здравствуйте! Подскажите, пожалуйста, как это можно исправить #include &lt;iostream&gt; #include&lt;Windows.h&gt; #include &lt;string.h&gt; using...

Полиморфизм и ошибка "Слишком много аргументов" - C++
... class Enemy { public: virtual int Damage() // или надо запить virtual int Damage(bool* Foo) { int x; ...

предлагаю программу людям "альтернативное копирование файлов в проводнике" - C++
Суть: программа копирует файл, который передаётся ей параметром командной строки. То есть: в первую очередь программу следует сделать...

Написать интерфейс "Парсер" с методом парсинга (разбора) файлов - C++
Помогите пожалуйста с заданием Написать интерфейс &quot;Парсер&quot; с методом парсинга (разбора) файлов parse(std::string filename). Написать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
06.02.2013, 04:24     Много файлов, а толку - "0" #21
там достаточно (в global.h)
C++
1
2
extern const int x;
extern int arr[];
ему там не надо писать лишнего x, т.к. выделения памяти нет, а размер созданного массива хранится в x
по сути указателя arr и числа x вам хватит с лихвой
Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 13:01  [ТС]     Много файлов, а толку - "0" #22
abit, а двумерный массив будет выгледеть так:

extern int *arr[];

Или я неправ?
Тогда как выгледит объевление без определения двумерного масива, а?
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
06.02.2013, 13:23     Много файлов, а толку - "0" #23
ой-ой
Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 13:48  [ТС]     Много файлов, а толку - "0" #24
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ой-ой
И что это значит?
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
06.02.2013, 15:21     Много файлов, а толку - "0" #25
Цитата Сообщение от Вальдемар Посмотреть сообщение
abit, а двумерный массив будет выгледеть так:

extern int *arr[];

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

C++
1
extern int arr[][];
но с другой стороны без разницы... вам достаточно лишь указать что это указатель
int arr[] полностью аналогично int * arr
операции [] над указателями - синтаксический сахар и я вчера это подробнее отписывал вот в этой теме - Как из указателя на массив достать конкретное значение массива
Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 16:53  [ТС]     Много файлов, а толку - "0" #26
Да я пробавал такое объевление но, оно непрокатывает.
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 минут
Кстати можете сами попробывать скомпилировать код и убедится - программа несобирается!
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
06.02.2013, 17:21     Много файлов, а толку - "0" #27
Вальдемар, вы можете сделать так? естественно всё надо по местам расскидать
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 минуты
обращение обычное, как к двухмерному масиву
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2013, 18:06     Много файлов, а толку - "0"
Еще ссылки по теме:

Доделать удаление элемента для линейного списка "Каталог файлов" - C++
В файловой системе каталог файлов организован как линейный список. Для каждого файла в каталоге содержатся следующие сведения: -&gt; имя...

Получить файл из данных других трёх файлов, используя "ссылки" четвёртого - C++
Есть txt файл, в нём текст вида 1 2 3 1 5 10 10 5 1 5 5 8 14 8 8 Каким способом изъять 3 циферки из каждой строки (их...

Программа, находящая папку по её полному "пути" и подсчитывающая количество файлов в ней - C++
Здравствуйте, вот код программы, а ошибка состоит в том, что программа не ищет папки или файлы по заданному пути, вместо этого она ищет...

Поиск файлов c расширением ".jpg" в папке - C++
Добрый день! Подскажите как лучше реализовать поиск в папке файлов з расширениям .jpg? Как бы есть программа для роботы з изображениями...

Сказ о программисте начинающем с классами бьющимся! (решил отабгрейдить свою "умную" копирывалку файлов) - C++
Доброго времени суток! Недавно начал классы, решил отабгрейдить свою &quot;умную&quot; копирывалку файлов, и потренироваться заодно. Но речь не об...


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

Или воспользуйтесь поиском по форуму:
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.02.2013, 18:06     Много файлов, а толку - "0" #28
Цитата Сообщение от Вальдемар Посмотреть сообщение
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, но конфликтовать они не будут.
Yandex
Объявления
06.02.2013, 18:06     Много файлов, а толку - "0"
Ответ Создать тему
Опции темы

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