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

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

Восстановить пароль Регистрация
 
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
13.06.2013, 18:54     Не компилируется код #1
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 минуты
ну где вы ,,эксперты С++,, что трудно такой нубский код посмотреть...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 18:54     Не компилируется код
Посмотрите здесь:

C++ Код не компилируется
Не компилируется код C++
В формате .cpp код компилируется, а в .c не компилируется C++
Почему не компилируется код C++
C++ Код не компилируется
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для 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;
}
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.....
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.06.2013, 19:34     Не компилируется код #4
GetVariable, что значит "относительно правильно" ?
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
14.06.2013, 14:18  [ТС]     Не компилируется код #5
up...
GetVariable
 Аватар для 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;
}
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.06.2013, 14:44     Не компилируется код #7
попробуй все в один файл запихнуть
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
14.06.2013, 15:15  [ТС]     Не компилируется код #8
GetVariable, а у Вас запускается программа? Потому что у меня опять ошибка линковщика... Прошу, помогите...
З.Ы. А почему Вы инициализируете статик-переменную через объект? Вроде бы она одна на все екземпляры класса

Добавлено через 26 минут
ап...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 15:55     Не компилируется код
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
coloc
погромист
 Аватар для coloc
409 / 245 / 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;
}
Yandex
Объявления
14.06.2013, 15:55     Не компилируется код
Ответ Создать тему
Опции темы

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