Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
viktorius
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 105
1

Ошибка LNK2019 в многофайловом проекте

11.05.2014, 02:25. Просмотров 405. Ответов 5
Метки нет (Все метки)

Смысл: Мне нужно создать абстрактный класс контейнер, на его основе конкретные классы, далее создать абстрактный класс итератор и для каждого класса контейнера свой итератор.
(для простоты оставил только один конкретный контейнер и итератор) При компиляции выходит ошибка
C++
1
Ошибка  1   error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector::Iterv::Iterv(int *)" (??0Iterv@Vector@@QAE@PAH@Z) в функции "public: virtual class Collect::Iterat & __thiscall Vector::Begin(void)" (?Begin@Vector@@UAEAAVIterat@Collect@@XZ)    vector.obj
Подключаю только то что здесь выложил
Помогите пожалуйста решить проблему

файлы
C++
1
2
3
4
5
6
7
8
#include "vector.h"
 
int main()
{
    Vector vv;
    system("pause");*/
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#ifndef ITERAT_H
#define ITERAT_H
 
class Iterat
{
public:
    virtual int Getelem() = 0;//значение элемента
    virtual Iterat &Next() = 0;//++
};
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#ifndef COLLECT_H
#define COLLECT_H
 
class Collect
{
public:
    #include "iterat.h"
    virtual ~Collect() {};
    virtual Iterat &Begin() = 0;
    virtual Iterat &End() = 0;
    virtual void Add(int) = 0;//добавление
    virtual int Find(int) const = 0;//поиск
    virtual int Size() const = 0;//размер
    virtual int Del(int) = 0;//удаление (и возвращение)
    virtual void Del_all() = 0;//удалить все
};
 
#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
#include <iostream>
#include "collect.h"
#ifndef VECTOR_H
#define VECTOR_H
 
class Vector : public Collect
{
    int *vec, size, top;
    static const int n = 10;
public:
    #include "iterv.h"
    Vector();
    Vector(int);
    ~Vector();
    Vector(const Vector &);
    Vector &operator = (const Vector &);
    int operator [] (int);
    Iterat &Begin();
    Iterat &End();
    void Add(int);
    int Find(int) const;
    int Size() const;
    int Del(int);
    void Del_all();
};
 
#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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include "vector.h"
using namespace std;
 
Vector::Vector(): top(0), size(0), vec(0)
{}
 
Vector::Vector(int t) : top(0)
{
    vec = new int[size = t];
    for(int i = 0; i < size; i++)
        vec[i] = 0;
}
 
Vector::~Vector()
{
    size = top = 0;
    delete [] vec;
    vec = 0;
}
 
Vector::Vector(const Vector &ob) : size(ob.size)
{
    vec = new int[size];
    for(top = 0; top < ob.top; top++)
        vec[top] = ob.vec[top];
}
 
Vector &Vector::operator = (const Vector &ob)
{
    if(this != &ob)
    {
        delete [] vec;
        size = ob.size;
        vec = new int[size];
        for(top = 0; top < ob.top; top++)
            vec[top] = ob.vec[top];
    }
    return *this;
}
 
void Vector::Add(int ell)
{
    if(!(size - top))
    {
        int *t = vec;
        vec = new int[size += n];
        for(int i = 0; i < top; i++)
            vec[i] = t[i];
        delete [] t;
    }
    vec[top++] = ell;
}
 
int Vector::Size() const
{
    return top;
}
 
int Vector::Find(int p) const
{
    for(int i = 0; i < top; i++)
        if(vec[i] == p)
            return vec[i];
    return 0;
}
 
int Vector::Del(int i)
{
    if(size && (size - top > n + n))
    {
        int *t = vec;
        vec = new int[size -= n];
        for(int j = 0; j < top; j++)
            vec[j] = t[j];
        delete [] t;
    }
    if(i > -1 && i < top)
    {
        --top;
        int t = vec[i];
        for(int j = i; j < top; j++)
            vec[j] = vec[j + 1];
        return t;
    }
    return 0;
}
 
void Vector::Del_all()
{
    top = 0;
}
 
Vector::Iterat &Vector::Begin()
{
    return Iterv(vec);
}
 
Vector::Iterat &Vector::End()
{
    return Iterv(vec + size);
}
 
int Vector::operator [] (int j)
{
    return (top > j && j > -1) ? vec[j] : 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "iterat.h"
#ifndef ITERV_H
#define ITERV_H
 
class Iterv : public Iterat
{
    int *temp;
public:
    Iterv();
    Iterv(int *);
    int Getelem();
    Iterat &Next();
};
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "iterv.h"
using namespace std;
 
Iterv::Iterv() : temp(0)
{}
 
Iterv::Iterv(int *v) : temp(v)
{}
 
Iterat &Iterv::Next()
{
    ++temp;
    return *this;
}
 
int Iterv::Getelem()
{
    return *temp;
}
Привожу структуру проекта
0
Миниатюры
Ошибка LNK2019 в многофайловом проекте  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 02:25
Ответы с готовыми решениями:

Ошибка lnk2019 для шаблонов в многофайловом приложении
Написал минимальный код, генерирующий такую ошибку. Сборщик ругается, что конструктор Obj1 не...

Ошибка линковки в многофайловом проекте
что за на??? в проекте 3 модуля: main.cpp, test.cpp, test.h, в main.cpp и test.cpp подключен...

Ошибка LNK2005 в многофайловом проекте
Появилась такая проблема ,выдает ошибку LNK2005 при компиляции программы,вроде сделано все...

Ошибка при работе с шаблонами в многофайловом проекте
Цель проста - пишу класс очереди, используя шаблоны. Возниает следующая ошибка: ||=== Build: Debug...

Struct в многофайловом проекте
Если в main файле создать структуру, то как её использовать в функциях, которые в других cpp...

5
newbie666
Заблокирован
11.05.2014, 06:14 2
Цитата Сообщение от viktorius Посмотреть сообщение
Ошибка* 1 * error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector::Iterv::Iterv(int *)" (??0Iterv@Vector@@QAE@PAH@Z) в функции "public: virtual class Collect::Iterat & __thiscall Vector::Begin(void)" (?Begin@Vector@@UAEAAVIterat@Collect@@XZ)* * vector.obj
Эта ошибка говорит о том, что ты где - то объявил функцию и забыл написать её реализацию... Так же, возможен косяк в студии - ну если что, всегда есть кнопка CleanSolution и Rebuild
0
0x10
2666 / 1816 / 303
Регистрация: 24.11.2012
Сообщений: 4,504
11.05.2014, 07:53 3
Цитата Сообщение от viktorius Посмотреть сообщение
C++
1
2
3
4
5
6
7
class Vector : public Collect
{
* * int *vec, size, top;
* * static const int n = 10;
public:
* * #include "iterv.h" // WTF?
* * Vector();
Вот никогда не надо так делать.
1
Oxie
Заблокирован
11.05.2014, 11:34 4
По-моему, вы не подключили какую-то lib статически в настройках проекта.
0
viktorius
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 105
11.05.2014, 14:47  [ТС] 5
а можете подсказать как сделать чтоб работало
C++
1
Vector::Iterv it;
я просто следовал примеру www.orel.ru/~dedok/Example3.htm
никаких внешних библиотек в моем коде не используется, причем я подключил все, может не в той последовательности подключил?
0
viktorius
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 105
12.05.2014, 16:10  [ТС] 6
Моя тема совсем затерялась, пожалуйста подскажите как мне правильно, без ошибок, скомпилировать свой проект.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
12.05.2014, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 16:10

Перегрузка << в многофайловом проекте
Чтобы узнать, как перегружать потоки, зашел на msdn, нашел там это: #include &lt;iostream&gt; using...

Ошибки в многофайловом проекте
Здравствуйте! У меня есть многофайловый проект. Он не закончен (только начатый), но запуск...

Иерархия классов в многофайловом проекте
Всем привет. Есть проблема с созданием программы. Должна быть небольшая иерархия классов, и все...


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

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

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