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

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

Войти
Регистрация
Восстановить пароль
 
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
#1

Не компилируется код - C++

13.06.2013, 18:54. Просмотров 379. Ответов 8
Метки нет (Все метки)

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
#include <iostream>
#include <fstream>
#include "menu.h"
 
void foo1() {
    std::cout << 1;
}
 
void foo2() {
    std::cout << 2;
}
 
void foo3() {
    std::cout << 3;
}
 
void foo4() {
    std::cout << 4;
}
 
void foo5() {
    std::cout << 5;
}
 
int main( int argc, char *argv[] ) {
    MenuItem *items = new MenuItem[4];
    
    /*std::cout << "1" << std::endl;
    std::cin.get();*/
    
    items[0].setName( "New file" );
    items[1].setName( "Open file" );
    items[2].setName( "About" );
    items[3].setName( "Exit" );
    
    /*std::cout << "2" << std::endl;
    std::cin.get();*/
    
    items[0].setFunc( foo1 );
    items[1].setFunc( foo2 );
    items[2].setFunc( foo3 );
    items[3].setFunc( foo4 );
    
    menu( items );
    return 0;
}


menu.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
#include "menu.h"
#include <conio.h>
#include <iostream>
#include <cstdlib>
 
#define UP 72
#define DOWN 80
#define ENTER 13
 
void menu( MenuItem *items ) {
            
    int item = 0;
    int key = 0;
    
    while( true ) {
        for( int i = 0; i < items->size(); i++ ) {
            if( item == i )
                std::cout << "-> ";
            std::cout << items[i].getName(); 
        }
        std::cin.get();
    }
}


MenuItem.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 "MenuItem.h"
 
MenuItem::MenuItem() {
            count++;
}
 
MenuItem::~MenuItem() {
            count--;
}
 
int MenuItem::size() {
            return count;
}
 
void MenuItem::setName( const std::string &tmp ) {
            name = tmp;
}
 
void MenuItem::setFunc( foo tmp ) {
            func = tmp;
}
 
std::string MenuItem::getName() {
            return name;
}
 
foo MenuItem::getFunc(){
            return func;
}
 
int MenuItem::count = 0;


menu.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
#include "MenuItem.h"
#ifndef MENU_H
#define MENU_H
 
void menu( MenuItem* );
#endif


MenuItem.h
Кликните здесь для просмотра всего текста
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
#include <iostream>
#ifndef MENUITEM_H
#define MENUITEM_H
 
typedef void (*foo)();
 
class MenuItem
{   
    public:
        static int count;
        MenuItem();
        ~MenuItem();
        int size();
        void setName( const std::string& );
        void setFunc( foo );
        std::string getName();
        foo getFunc();
        
    private:
        std::string name;
        foo func;
};
 
#endif


Прошу, помогите пожалуйста
multiple definition of `MenuItem::~MenuItem()'

ошибка должна быть в определении или реализации класса тоесть в файлах MenuItem.h или MenuItem.срр

Добавлено через 9 минут
Точнее сказать это ошибка линковщика. И что интересно, если добавить в реализации класса слово статик, то уже компилятор ругается, хотя не должен бы...
C++
1
2
//в 31 строке MenuItem.cpp
static int MenuItem::count = 0;
Добавлено через 32 минуты
ну где вы ,,эксперты С++,, что трудно такой нубский код посмотреть...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 18:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не компилируется код (C++):

В формате .cpp код компилируется, а в .c не компилируется - C++
1).Подскажите почему в формате .cpp код компилируется, а в .c не компилируется 2). Как сделать так, чтобы компилировалось в .c? ...

Не компилируется код - C++
Есть код на подобие такого: template&lt;int a&gt; class A { public: static const int x1 = B&lt;a,1&gt;::x2; }; template&lt;int a, int b&gt; ...

Не компилируется код - C++
я написал код проверял не компелирует почему-то пользуюсь dev c++ пишет проект или исходный файл не скомпелирован вот код #include...

Не компилируется код - C++
#include &lt;QCoreApplication&gt; #include &lt;iostream&gt; using std::cout; using std::endl; int squareByValue(int); // прототип передача...

Код не компилируется - C++
Объясните пож-та, почему код не компилируется: // File Output.cpp: определяет точку входа для консольного приложения. // ...

Код не компилируется - C++
#include &lt;iostream&gt; #define _USE_MATH_DEFINES #include &lt;math.h&gt; double circle_area(int radius); using namespace std; int...

8
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
13.06.2013, 18:57 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
class  Test
{
public:
    int x;
};
 
int main()
{
    Test test();
 
    test.x = 0; // относительно правильно.
 
    test::x = 0; // не правильно.
 
 
    return 0;
}
1
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
13.06.2013, 19:25  [ТС] #3
дописал в мейн
C++
1
items->count = 0;
теперь ругается линковщик:
[Linker error] main.o:main.cpp.text+0x146): undefined reference to `MenuItem::count'

Добавлено через 17 минут
UP.....
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.06.2013, 19:34 #4
GetVariable, что значит "относительно правильно" ?
0
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
14.06.2013, 14:18  [ТС] #5
up...
0
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 14:38 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main( int argc, char *argv[] ) {
    MenuItem *items = new MenuItem[4];
    
    /*std::cout << "1" << std::endl;
    std::cin.get();*/
    
    items[0].setName( "New file" );
    items[1].setName( "Open file" );
    items[2].setName( "About" );
    items[3].setName( "Exit" );
    
    /*std::cout << "2" << std::endl;
    std::cin.get();*/
    
    items[0].setFunc( foo1 );
    items[1].setFunc( foo2 );
    items[2].setFunc( foo3 );
    items[3].setFunc( foo4 );
    items[3].count = 55;  
    
    menu( items );
    return 0;
}
2
coloc
погромист
410 / 246 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.06.2013, 14:44 #7
попробуй все в один файл запихнуть
1
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
14.06.2013, 15:15  [ТС] #8
GetVariable, а у Вас запускается программа? Потому что у меня опять ошибка линковщика... Прошу, помогите...
З.Ы. А почему Вы инициализируете статик-переменную через объект? Вроде бы она одна на все екземпляры класса

Добавлено через 26 минут
ап...
0
coloc
погромист
410 / 246 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.06.2013, 15:55 #9
Вот полностью рабочий проект:

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
#include <iostream>
#include <fstream>
#include "menu.h"
#include "MenuItem.h"
 
void foo1() {
    std::cout << 1;
}
 
void foo2() {
    std::cout << 2;
}
 
void foo3() {
    std::cout << 3;
}
 
void foo4() {
    std::cout << 4;
}
 
void foo5() {
    std::cout << 5;
}
 
int main( int argc, char *argv[] ) {
    MenuItem *items = new MenuItem[4];
    
    items[0].setName( "New file" );
    items[1].setName( "Open file" );
    items[2].setName( "About" );
    items[3].setName( "Exit" );
    
    items[0].setFunc( foo1 );
    items[1].setFunc( foo2 );
    items[2].setFunc( foo3 );
    items[3].setFunc( foo4 );
    
    menu( items );
    return 0;
}


menu.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
#include "MenuItem.h"
#ifndef MENU_H
#define MENU_H
 
void menu( MenuItem* );
#endif


menu.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
#include "menu.h"
#include "MenuItem.h"
#include <conio.h>
#include <iostream>
#include <cstdlib>
 
#define UP 72
#define DOWN 80
#define ENTER 13
 
void menu( MenuItem *items ) {
            
    int item = 0;
    int key = 0;
    
    while( true ) {
        for( int i = 0; i < items->size(); i++ ) {
            if( item == i )
                std::cout << "-> ";
            std::cout << items[i].getName() << std::endl; 
        }
        
        key = getch();
        
        switch( key ) {
            case UP:
                if( item == 0 ) {
                    item = items->size() - 1;
                } else {
                    item--;
                }
                break;
                
            case DOWN:
                if( item == items->size() - 1 ) {
                    item = 0;
                } else {
                    item++;
                }
                break;
                
            case ENTER:
                foo f = items[item].getFunc();
                (*f)();
                return;
                break;
        }
        system( "cls" );
    }       
}


MenuItem.h
Кликните здесь для просмотра всего текста
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
#include <iostream>
#ifndef MENUITEM_H
#define MENUITEM_H
 
typedef void (*foo)();
 
class MenuItem
{   
    public:
        MenuItem();
        ~MenuItem();
        static int size();
        void setName( const std::string& );
        void setFunc( foo );
        std::string getName();
        foo getFunc();
        
    private:
        std::string name;
        foo func;
        static int count;
};
 
#endif


MenuItem.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 "MenuItem.h"
 
int MenuItem::count = 0;
 
MenuItem::MenuItem() {
            count++;
}
 
MenuItem::~MenuItem() {
            count--;
}
 
int MenuItem::size() {
            return count;
}
 
void MenuItem::setName( const std::string &tmp ) {
            name = tmp;
}
 
void MenuItem::setFunc( foo tmp ) {
            func = tmp;
}
 
std::string MenuItem::getName() {
            return name;
}
 
foo MenuItem::getFunc(){
            return func;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 15:55
Привет! Вот еще темы с ответами:

Код не компилируется - C++
Код не компилируется, компилятор выдаёт очень много ошибок! Скажите пожалуйста что исправить? Заранее благодарен! #include...

Код не компилируется - C++
не пойму, почему не компилируется #include &lt;iostream&gt; //#include &lt;new&gt; //#include &lt;cstdlib&gt; using namespace std; class loc{ ...

Почему не компилируется код - C++
Доброго времени суток, я только начал постигать азы великого и могучего, по этому не смейтесь если вам вопрос покажется слишком простым......

дан код, не компилируется - C++
Задано натуральное число k, символьный файл g и текстовый файл f. Файл g содержит 30 слов, каждое из которых будем называть ключевым....


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
14.06.2013, 15:55
Ответ Создать тему
Опции темы

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