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

Ошибка компиляции - C++

Восстановить пароль Регистрация
 
Sergey_c
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 6
06.02.2013, 21:11     Ошибка компиляции #1
Есть проект, в котором абстрактный класс Colection, и два наследуемых Vector и Steck.
При компиляции выдает ошибки:
Ошибка 1 "error C2011: Colection: переопределение типа "class"" в colection.h
Ошибка 2 "error C2504: Colection: не определен базовый класс" в vector.h.
Что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
colection.h
#ifndef COLECTION_H
#define COLEСTION_H
 
class Colection
{
public:
    virtual bool Add(int)=0;
    virtual int Find(int)=0;
    virtual bool Delete(int)=0;
    virtual void Delete_All()=0;
    virtual ~Colection(){}
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vector.h
#ifndef VECTOR_H
#define VECTOR_H
 
#include "Colection.h"
 
class Vector :
    public Colection
{
public:
    Vector();
    ~Vector();
 
    bool Add(int elem);
    int Find(int elem);
    bool Delete(int elem);
    void Delete_All();
private:
    int * arr;
    int size;
    static int count;
};

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
steck.h
#ifndef STECK_H
#define STECK_H
 
#include "Colection.h"
 
struct NODE
{
    int value;
    struct NODE *next;
};
 
class Steck:
    public Colection
{
    NODE *node;
    int size;
public:
    Steck();
        ~Steck();
 
    bool Add(int elem);
    int Find(int elem);
    bool Delete(void);
    void Delete_All();
    };
#endif
C++
1
2
3
4
5
6
7
8
9
10
main.cpp
#include "Steck.h"
#include "Vector.h"
#include "Colection.h"
#include <iostream>
 
int main()
{
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 21:11     Ошибка компиляции
Посмотрите здесь:

C++ Ошибка компиляции
ошибка компиляции C++
ошибка компиляции C++
C++ Ошибка компиляции
ошибка компиляции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algiz
159 / 159 / 13
Регистрация: 23.02.2011
Сообщений: 347
06.02.2013, 21:53     Ошибка компиляции #2
>> virtual bool Add(int)=0;
Во-первых Add объявлена как функция, а ты ей значение присваеваешь.
Во-вторых Add объявлена как virtual а ты ей значение присваиваешь.
Sergey_c
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 6
06.02.2013, 22:40  [ТС]     Ошибка компиляции #3
virtual bool Add(int)=0; это запись правильная т. к.
class Colection абстрактный, содержит 4 чистых виртуальных функции, одна из которых Add.
Ошибка в переопределение класса Colection.
Еще дополнение: если main.cpp компилировать только с одним включенным хедором то ошибку не выдает.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.02.2013, 22:53     Ошибка компиляции #4
Sergey_c, нужно переопределить все чистые виртуальные функции.

Добавлено через 8 минут
Цитата Сообщение от Sergey_c Посмотреть сообщение
bool Delete(void);
Я про это. Не хорошо так.
Sergey_c
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 6
06.02.2013, 22:54  [ТС]     Ошибка компиляции #5
Для vector.h и steck.h есть cpp, в которых они переопределены.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.02.2013, 22:54     Ошибка компиляции #6
да, ошибки непонятные, долго не мог вкурить, что там такое. по наводке go посмотрел внимательно.
может быть такие ошибки из-за этого:
в базовом:
virtual bool Delete(int)=0;
в стеке:
bool Delete(void);

сигнатуры не совпадают. но это лишь означает, что стек по прежнему абстрактный и инстансы нельзя создавать.
а в приведенном коде они вроде и не создаются. непонятки в общем остались.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.02.2013, 22:56     Ошибка компиляции #7
Цитата Сообщение от Sergey_c Посмотреть сообщение
Для vector.h и steck.h есть cpp, в которых они переопределены.
Цитата Сообщение от go Посмотреть сообщение
bool Delete(void);
Я про это. Не хорошо так.
Разная сигнатура.

Добавлено через 1 минуту
Хотя это уже будет, когда объект захотите создать.
Sergey_c
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 6
06.02.2013, 23:16  [ТС]     Ошибка компиляции #8
Измененный хедер и cpp файлы.
ЗДЕСЬ НЕТ синтаксических ошибок.
Ошибка в реализации. При подключении двух, трех из этих библиотек возникают эти две ошибки. Если подключить одну то их нет.
Нужно изменить реализацию (при этом, чтобы абстрактный класс Colection наследовал классы Vector и Steck.

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
steck.h
#ifndef STECK_H
#define STECK_H
 
#include "Colection.h"
 
struct NODE
{
    int value;
    struct NODE *next;
};
 
class Steck:
    public Colection
{
    NODE *node;
    int size;
public:
    Steck();
    Steck(int elem);
    bool Add(int elem);
    int Find(int elem);
    bool Delete(void);
    bool Delete(int);
    void Delete_All();
 
    ~Steck();
};
#endif
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
steck.cpp
#include "Steck.h"
#include <iostream>
 
Steck::Steck():size(0),node(0)
{
}
 
Steck::Steck(int elem):size(1)
{
    node = new NODE;
    node->next = NULL;
    node->value = elem;
}
 
Steck::~Steck()
{
    while(node)
    {
        Delete();
    }
}
 
bool Steck::Add(int elem)
{
    struct NODE *pnew;
    pnew = node;
    while(pnew)
        pnew = pnew->next;
 
    size++;
    pnew = new NODE;
    pnew->value = elem;
    pnew->next =NULL;
    return false;
}
 
int Steck::Find(int elem)
{
    struct NODE *pnew;
    pnew = node;
    while(pnew)
    {
        if(pnew->value == elem)
            return 0;
        pnew = pnew->next;
    }
    return -1;
}
 
bool Steck::Delete(void)
{
    struct NODE *pnew;
    pnew = node;
    while(pnew->next)
        pnew = pnew->next;
    delete pnew;
    pnew = NULL;
    return false;
}
bool Steck::Delete(int a)
{
     return Delete();
}
void Steck::Delete_All()
{
    while(node)
    {
        Delete();
    }
}
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
vector.cpp
#include "vector.h"
#include <iostream>
using namespace std;
 
Vector::Vector():arr(NULL), size(0)
{
    count++;
}
Vector::Vector(int s):size(s)
{
    count++;
    arr = new int[size];
    for(int i=0;i<size;i++)
        arr[i]=0;
}
 
Vector::~Vector()
{
    delete [] arr;
    count--;
}
 
bool Vector::Add(int elem)
{
    Vector copy(*this);
    size++;
    delete [] arr;
    arr = new int[size];
    for(int i = 0; i<size-1; i++)
        arr[i] = copy.arr[i];
    arr[size-1] = elem;
    return false;
}
int Vector::Find(int elem)
{
    for(int i = 0;i < size; i++)
        if(elem == arr[i]) return i;
    cout<<elem<<" No find";
    return -1;
}
bool Vector::Delete(int elem)
{
    if(Find(elem) >= 0)
    {
        int index=Find(elem);
        Vector copy(*this);
        size--;
        delete [] arr;
        arr = new int[size];
        for(int i = 0; i<index; i++)
            arr[i] = copy.arr[i];
        for(int i = index+1; i<size; i++)
            arr[i-1] = copy.arr[i];
        return false;
    }
    return true;
}
 
void Vector::Delete_All()
{
    if(arr)
    {
        delete [] arr;
        count--;
    }
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.02.2013, 23:21     Ошибка компиляции #9
неплохо было бы увидеть еще имя файла и строчки, на которые ошибки выдаются
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.02.2013, 23:34     Ошибка компиляции #10
В vector.h отсутствует #endif

Добавлено через 1 минуту
хотя да...
Sergey_c
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 6
07.02.2013, 00:16  [ТС]     Ошибка компиляции #11
Ошибка возникает из-за в обоих хедерах подключаем хедер базисного класса.
И при компиляции это участка кода возникает ошибка.
C++
1
2
3
4
5
6
7
8
9
10
#include "Steck.h"       // создаем реализацию Colection
#include "Vector.h"      // создаем еще одну реализацию
#include "Colection.h"   // и еще одну
#include <iostream>
 
int main()
{
    //Steck a;
        return 0;
}
но при этом это включение из хедора нельзя убирать.
я вообще не знаю, что делать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 13:17     Ошибка компиляции
Еще ссылки по теме:

C++ Ошибка компиляции
Ошибка компиляции C++
Ошибка компиляции C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.02.2013, 13:17     Ошибка компиляции #12
Sergey_c, смотрите, все работает http://liveworkspace.org/code/4DPkRM$0
Yandex
Объявления
07.02.2013, 13:17     Ошибка компиляции
Ответ Создать тему
Опции темы

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