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

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

Восстановить пароль Регистрация
 
 
Вальдемар
 Аватар для Вальдемар
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
05.02.2013, 18:34     Много файлов, а толку - "0" #1
Вот разбил код на файлы и теперь непойму где сныкался - 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++ предлагаю программу людям "альтернативное копирование файлов в проводнике"
Сказ о программисте начинающем с классами бьющимся! (решил отабгрейдить свою "умную" копирывалку файлов) C++
C++ Ошибка "Слишком много аргументов в вызове функции"
C++ Полиморфизм и ошибка "Слишком много аргументов"
C++ Много ошибок типа "syntax error: identifier"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для 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
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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
 Аватар для 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,585
Записей в блоге: 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++
Класс "Дроби". Как собрать приложение из трёх файлов? C++
C++ Поиск файлов c расширением ".jpg" в папке

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

Или воспользуйтесь поиском по форуму:
Schizorb
 Аватар для Schizorb
508 / 460 / 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"
Ответ Создать тему
Опции темы

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