-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
1

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

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

Author24 — интернет-сервис помощи студентам
Вот разбил код на файлы и теперь непойму где сныкался - 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2013, 18:34
Ответы с готовыми решениями:

слишком много аргументов в вызове функции или как создать много файлов на рабочем столе
Мне нужно создать на рабочем столе очень много файлов вот команда для создания 1 файла wchar_t...

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

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

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

27
163 / 163 / 22
Регистрация: 23.02.2011
Сообщений: 347
05.02.2013, 19:09 2
ты б хоть ошибку привел
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 19:10 3
Цитата Сообщение от Вальдемар Посмотреть сообщение
const int L = 30; // длинна
const int W = 20; // ширина
char map[W][L];
убирайте из заголовочного файла
0
163 / 163 / 22
Регистрация: 23.02.2011
Сообщений: 347
05.02.2013, 19:11 4
и я, например, не вижу реализаций функций из sfunc.h
0
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
05.02.2013, 19:25  [ТС] 5
Дело в том что проект состоящий из зтих файлов несобирается/
ошибку непомну...

Добавлено через 2 минуты
const int L = 30; // длинна
const int W = 20; // ширина
char map[W][L];

Убирал, и не че.
И так крутил, итак - неченевыходит.

Добавлено через 8 минут
Вот ошибка:
multiple definition of `map'
first defined here
ld returned 1 exit status
D:\progs\Dev-Cpp\myscr\myConsole\Makefile.win [Build Error] [Output/MingW/nySnake.exe] Error 1

пользуюсь wxDev-C++
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 19:43 6
Цитата Сообщение от Вальдемар Посмотреть сообщение
multiple definition of `map'
как я и говорил, нельзя в .h файлах переменные объявлять глобальные, идет переопределение.
Перенесите их в .cpp файл
0
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
05.02.2013, 19:51  [ТС] 7
Перенес в *.срр - тогда их невидно в реализации класа, и выдает ошибку
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
05.02.2013, 19:52 8
Вальдемар, определения - как и сказали, в цпп. В заголовочник - объявления:
C++
1
extern char map[W][L];
А на будущее - не использовать глобальных переменных.
0
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
05.02.2013, 19:59  [ТС] 9
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <conio.h>
#include <ctime>
#include <windows.h>
#include <cstdlib>
 
const int L = 30; // äëèííà
const int W = 20; // øèðèíà
char map[W][L];
 
#include "snake.h"
#include "sfunc.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
 
extern const int L; // äëèííà
extern const int W; // øèðèíà
extern 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
Ошибка!!!
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 20:00 10
Цитата Сообщение от Вальдемар Посмотреть сообщение
Ошибка!!!
Где?

и почему в main.cpp нету функции main?
0
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
05.02.2013, 20:12  [ТС] 11
1 D:\progs\Dev-Cpp\myscr\myConsole\snake.cpp In file included from snake.cpp
6 D:\progs\Dev-Cpp\myscr\myConsole\snake.h variable-size type declared outside of any function
6 D:\progs\Dev-Cpp\myscr\myConsole\snake.h variable-size type declared outside of any function
D:\progs\Dev-Cpp\myscr\myConsole\Makefile.win [Build Error] [Objects/MingW/snake.o] Error 1

Добавлено через 1 минуту
Нет майна потомучто ниписал на скорую руку.

Добавлено через 9 минут
Вот все листинги:

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
 
extern const int L; // äëèííà
extern const int W; // øèðèíà
extern 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] = '<';
}
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
sfunc.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
#include "sfunc.h"
 
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;
    }
}
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
#include <iostream>
#include <conio.h>
#include <ctime>
#include <windows.h>
#include <cstdlib>
 
const int L = 30; // äëèííà
const int W = 20; // øèðèíà
char map[W][L];
 
#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;
}
незнаю че ей нехватает?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
05.02.2013, 20:20 12
Вальдемар, сталиквался, много нервов пожёг.
ставете на всех хейдерах стражей. в хейдерах оставляете только статики или экстерны (зависит от ваших намерений). на все экстерны делаете объявления в cpp файлах. у меня в блоге есть решение такой проблеммы
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
05.02.2013, 20:23 13
А файлы то все в проект подключены?
0
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
05.02.2013, 20:24  [ТС] 14
Van111, превидите пример пожалуйста.
хотяб небольшой.

Добавлено через 58 секунд
Да да, они в проекте.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
05.02.2013, 21:06 15
main
C++
1
2
3
4
5
6
7
#include <iostream>
#include "global.h""
int main()
{
    std::cout << x << " " <<y << std::endl;
    return 0;
}
класс 1
юнит1 - хейдер
C++
1
2
3
4
#include "global.h"
#ifndef unit1_h
//.....
#endif
юнит1 - реализация
C++
1
2
#include "unit1.h"
const int x = 5;
класс 2
юнит2 - хейдер
C++
1
2
3
4
5
#include "global.h"
#ifndef unit1_h
extern const int y2;
//.......
#endif
юнит2 - реализация
C++
1
2
3
#include "unit2.h"
const int y =8;
const int y2 =8;
глобал - хейдер

C++
1
2
3
4
#ifndef global_h
extern const int x;
extern const int y;
#endif
Добавлено через 1 минуту
Вальдемар, если интересует конкретно чтото - вылаживайте весь, весь код
а лучше проект MVC
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
05.02.2013, 21:11 16
Цитата Сообщение от Van111 Посмотреть сообщение
#ifndef unit1_h
//.....
#endif
и что тебе даст эта конструкция??
макрос то не определяется
и твой сторожевик не сработает
вот так делают
C++
1
2
3
4
#ifndef unit1_h
#define unit1_h
//.....
#endif
если макрос не определен заходим внутрь что то делаем и определяем макрос
если еще одно включение то макрос уже определен обходим
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
05.02.2013, 21:23 17
Мне интересно, я один заметил кривые include стражи у автора???
Короче, даю подсказку. Содержимое файла "sfunc.h" даже не подключается в main.cpp и соответственно все функций из sfunc не имеют прототипов.
Почему? потому что не срабатывает условие #ifndef в нём.
А теперь угадай почему.
Вот и интересно, кто-нибудь за 2 страницы обсуждения это заметил? Ну-же, не хочу портить загадку прямым ответом.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
05.02.2013, 21:43 18
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я один заметил кривые include стражи у автора???
а в чем кривизна?

Цитата Сообщение от Вальдемар Посмотреть сообщение
C++
1
2
3
4
5
6
#ifndef FUNCTION_SNAKE_H
#define FUNCTION_SNAKE_H
void initMap(); // инициализация карты
void showMap(); // функция рисует карту
void control(const char key, snake &s); // управление змейкой
#endif // FUNCTION_SNAKE_H
#ifndef FUNCTION_SNAKE_H проверяем определен ли макрос если да то выходим(обходим блок)
если нет идем сюда
#define FUNCTION_SNAKE_H определяем макрос
чтото делаем
#endif конец блока
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
05.02.2013, 21:57 19
Цитата Сообщение от ValeryS Посмотреть сообщение
а в чем кривизна?
Ох, либо показалось, либо автор уже исправил.
Я думал, что имена макросов в обоих хедерах одинаковые.(#define SNAKE_H)
Это привело бы к ошибке.
Мда. а я ещё удивился, что заметил это, хотя обычно невнимателен к таким вещам. И вот те на.

Добавлено через 6 минут
ну тогда я вижу всё равно ошибку.
Никогда не объявляйте глобальные переменные в хедерах.
Также как и с функциями, переменные должны находиться в cpp файлах, причём одна переменная должна объявляться только в одном из файлов
А в h файлах они должны быть помечены как extern, т.к. один h файл может подключаться в несколько срр до их компиляции, а затем при линковке программы обнаружится, что переменная объявлена несколько раз!

ах да, всю тему не читал, оказывается уже заметили
0
-5 / 0 / 0
Регистрация: 29.07.2012
Сообщений: 61
06.02.2013, 01:08  [ТС] 20
Я заметил еще одну странность:

global.h
C++
1
2
3
4
5
6
7
#ifndef GLOBAL_H
#define GLOBAL_H
 
extern const int x;
extern int arr[x];
 
#endif
func.h
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef FUNC_H
#define FUNC_H
 
#include <cstdlib>
#include <iostream>
 
#include "global.h"
 
void display();
 
#endif
func.cpp
C++
1
2
3
4
5
6
7
8
#include "func.h"
 
void display(){
    for(int i=0; i<x; i++) arr[i] = i;
    
    for(int i=0; i<x; i++) std::cout << arr[i] << " ";
    std::cout << std::endl;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "func.h"
 
const int x = 5;
int arr[x];
 
int main(int argc, char *argv[]){
    
    display();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Эти хейдры и сипипишки тоже не собираются.
Ядумаю проблема в глобальном объевлении массива, так как с обычными глобальными переменнымми все работает на ура!

И КАК-ЖЕ БЫТЬ?
0
06.02.2013, 01:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2013, 01:08
Помогаю со студенческими работами здесь

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

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

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

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

Как удалить много файлов?
На локальном сервере установил денвер,php 5.3,в папку со скриптом положил 4 картинки содержимое...

Много файлов в одном проекте
Хочу изучить к примеру некую программу... Скачиваю проект, а там в папке куча других папок и...

ВК ВЧ и нету толку
Меня всегда интересовал вопрос, я занимаюсь корпоративным сайтом магазина офисной мебели &quot;Кабинет&quot;....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru