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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 433
#1

visual studio 2012 - ошибка "переопределение типа" - C++

11.11.2012, 10:22. Просмотров 1340. Ответов 7
Метки нет (Все метки)

имею

head.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
25
26
27
28
29
#include <stdio.h>
#include <iostream>
 
#include <Windows.h>
#pragma comment(lib, "ws2_32")
using namespace std;
 
    enum Purpose
{
    STOP_PURPOSE =0,
    INIT_PURPOSE,
    FRAME_PURPOSE,
    NO_PURPOSE
};
 
struct sState
{
    sState* Prev;
    void (*Function)(void* CallerPtr,Purpose Purp);
    sState()
    {
        Prev = NULL;
        Function = NULL;
    }
    ~sState()
    {
        delete Prev;
    }
};
Ошибка 1 error C2011: Purpose: переопределение типа "enum" c:\users\miha\documents\visual studio 2012\projects\losangeles\losangeles\head.h 9
Ошибка 2 error C2011: sState: переопределение типа "struct" c:\users\miha\documents\visual studio 2012\projects\losangeles\losangeles\head.h 17

вот это как так ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2012, 10:22     visual studio 2012 - ошибка "переопределение типа"
Посмотрите здесь:
Visual Studio 2012 Ошибка 1 error : Required file "tracker.exe" is missing. C++
Как запретить ввод слова "con" в консоли Visual Studio 2012 C++
C++ Ошибка "error C2011: переопределение типа"
C++ Visual Studio C++, ошибка : "Данный проект устарел"
Ошибка аргумент типа "char" несовместим с параметром типа "LPCSTR" C++
C++ C2011 переопределение типа "enum" RFMapTool c:\dxsdk\include\d3d8types.h
Переопределение оператора "меньше" пользовательского типа для работы с set C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.11.2012, 10:36     visual studio 2012 - ошибка "переопределение типа" #2
Какие ещё файлы в проекте? Там что подключено?
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 433
11.11.2012, 11:06  [ТС]     visual studio 2012 - ошибка "переопределение типа" #3
alsav22, эмм
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "head.h"
#include "StateManager.h"
 
 
 
 
 
 
 
void Fun1(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout << "Fun1 stopping" <<endl;
        break;
    case INIT_PURPOSE:
        cout << "fun1 staring" << endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun1 processinf"<<endl;
        break;
    default:
        cout<<"fun1 no purpose"<<endl;
        break;
    }
}
 
void Fun2(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout<<"fun2 stop"<<endl;
        break;
    case INIT_PURPOSE:
        cout<<"fun2 starting "<<endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun2 proccessing" << endl;
        break;
    default:
        cout<<"fun2 no purpose"<<endl;
        break;
    }
}
 
void Fun3(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout<<"fun3 stop"<<endl;
        break;
    case INIT_PURPOSE:
        cout<<"fun3 starting "<<endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun3 proccessing" << endl;
        break;
    default:
        cout<<"fun3 no purpose"<<endl;
        break;
    }
}
void main()
{
CStateManager StateMan;
cout<<"<process>"<<endl;
StateMan.process(NULL);
cout<<"<change to fun1 >"<<endl;
StateMan.Push(Fun1,NULL);
cout<<"<change to fun2 >"<<endl;
StateMan.Push(Fun2,NULL);
cout<<"<procces>"<<endl;
StateMan.process(NULL);
cout<<"<kill fun2>"<<endl;
StateMan.Pop();
cout<<"<change to fun3>"<<endl;
StateMan.Push(Fun3);
cout<<"procces"<<endl;
StateMan.process(NULL);
cout<<"<kill all>"<<endl;
StateMan.PopAll(NULL);
cout<<"<procces>"<<endl;
StateMan.process(NULL);
}

stateManger.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
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "head.h"
#include "StateManager.h"
 
 
 
 
 
 
 
void Fun1(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout << "Fun1 stopping" <<endl;
        break;
    case INIT_PURPOSE:
        cout << "fun1 staring" << endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun1 processinf"<<endl;
        break;
    default:
        cout<<"fun1 no purpose"<<endl;
        break;
    }
}
 
void Fun2(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout<<"fun2 stop"<<endl;
        break;
    case INIT_PURPOSE:
        cout<<"fun2 starting "<<endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun2 proccessing" << endl;
        break;
    default:
        cout<<"fun2 no purpose"<<endl;
        break;
    }
}
 
void Fun3(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout<<"fun3 stop"<<endl;
        break;
    case INIT_PURPOSE:
        cout<<"fun3 starting "<<endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun3 proccessing" << endl;
        break;
    default:
        cout<<"fun3 no purpose"<<endl;
        break;
    }
}
void main()
{
CStateManager StateMan;
cout<<"<process>"<<endl;
StateMan.process(NULL);
cout<<"<change to fun1 >"<<endl;
StateMan.Push(Fun1,NULL);
cout<<"<change to fun2 >"<<endl;
StateMan.Push(Fun2,NULL);
cout<<"<procces>"<<endl;
StateMan.process(NULL);
cout<<"<kill fun2>"<<endl;
StateMan.Pop();
cout<<"<change to fun3>"<<endl;
StateMan.Push(Fun3);
cout<<"procces"<<endl;
StateMan.process(NULL);
cout<<"<kill all>"<<endl;
StateMan.PopAll(NULL);
cout<<"<procces>"<<endl;
StateMan.process(NULL);
}
zss
Модератор
Эксперт С++
6277 / 5880 / 1902
Регистрация: 18.12.2011
Сообщений: 15,079
Завершенные тесты: 1
11.11.2012, 11:13     visual studio 2012 - ошибка "переопределение типа" #4
Удалите из SateManager.h строки
C++
1
2
#include "head.h"
#include "StateManager.h"
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.11.2012, 11:22     visual studio 2012 - ошибка "переопределение типа" #5
У вас что, main() в двух файлах?

Добавлено через 2 минуты
Два одинаковых файла: main.cpp и stateManger.h? Это зачем?
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 433
11.11.2012, 11:39  [ТС]     visual studio 2012 - ошибка "переопределение типа" #6
alsav22, блин ошибся
statemanager.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "head.h"
 
#pragma once
 
 
 
 
class CStateManager
{
 
 
public:
    CStateManager(void);
    ~CStateManager(void);
    bool Push(void (*Function)(void* CallerPtr,Purpose Purp),void* CallerPtr=NULL);
    bool Pop(void* CallerPtr=NULL);
    bool PopAll(void* CallerPtr=NULL);
    bool process(void* CallerPtr=NULL);
private:
    sState* m_CurrentState;
};
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "head.h"
#include "StateManager.h"
 
 
 
 
 
 
 
void Fun1(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout << "Fun1 stopping" <<endl;
        break;
    case INIT_PURPOSE:
        cout << "fun1 staring" << endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun1 processinf"<<endl;
        break;
    default:
        cout<<"fun1 no purpose"<<endl;
        break;
    }
}
 
void Fun2(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout<<"fun2 stop"<<endl;
        break;
    case INIT_PURPOSE:
        cout<<"fun2 starting "<<endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun2 proccessing" << endl;
        break;
    default:
        cout<<"fun2 no purpose"<<endl;
        break;
    }
}
 
void Fun3(void* CallertPtr,Purpose Purp)
{
    switch (Purp)
    {
    case STOP_PURPOSE:
        cout<<"fun3 stop"<<endl;
        break;
    case INIT_PURPOSE:
        cout<<"fun3 starting "<<endl;
        break;
    case FRAME_PURPOSE:
        cout<<"fun3 proccessing" << endl;
        break;
    default:
        cout<<"fun3 no purpose"<<endl;
        break;
    }
}
void main()
{
CStateManager StateMan;
cout<<"<process>"<<endl;
StateMan.process(NULL);
cout<<"<change to fun1 >"<<endl;
StateMan.Push(Fun1,NULL);
cout<<"<change to fun2 >"<<endl;
StateMan.Push(Fun2,NULL);
cout<<"<procces>"<<endl;
StateMan.process(NULL);
cout<<"<kill fun2>"<<endl;
StateMan.Pop();
cout<<"<change to fun3>"<<endl;
StateMan.Push(Fun3);
cout<<"procces"<<endl;
StateMan.process(NULL);
cout<<"<kill all>"<<endl;
StateMan.PopAll(NULL);
cout<<"<procces>"<<endl;
StateMan.process(NULL);
}
zss
Модератор
Эксперт С++
6277 / 5880 / 1902
Регистрация: 18.12.2011
Сообщений: 15,079
Завершенные тесты: 1
11.11.2012, 11:52     visual studio 2012 - ошибка "переопределение типа" #7
У Вас повторно подключаеся head.h
в Statemanager.h
Удалите эту строку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2012, 12:04     visual studio 2012 - ошибка "переопределение типа"
Еще ссылки по теме:
Двусвязный список - Error C2011: ElementsList: переопределение типа "struct" C++
C++ Компилятор выдаёт ошибку: error C2011: Confection::Date: переопределение типа "struct". Как исправить?
Переопределение типа "class" C++
C++ переопределение типа "class"
C++ Ошибка преобразования: значение типа "float *" нельзя присвоить сущности типа "float"

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.11.2012, 12:04     visual studio 2012 - ошибка "переопределение типа" #8
И реализации для методов CStateManager сделайте.
Yandex
Объявления
11.11.2012, 12:04     visual studio 2012 - ошибка "переопределение типа"
Ответ Создать тему
Опции темы

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