Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 106

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

11.05.2014, 02:25. Показов 1088. Ответов 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;
}
Привожу структуру проекта
Миниатюры
Ошибка LNK2019 в многофайловом проекте  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.05.2014, 02:25
Ответы с готовыми решениями:

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

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

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

5
Заблокирован
11.05.2014, 06:14
Цитата Сообщение от 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
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
11.05.2014, 07:53
Цитата Сообщение от 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
Заблокирован
11.05.2014, 11:34
По-моему, вы не подключили какую-то lib статически в настройках проекта.
0
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 106
11.05.2014, 14:47  [ТС]
а можете подсказать как сделать чтоб работало
C++
1
Vector::Iterv it;
я просто следовал примеру www.orel.ru/~dedok/Example3.htm
никаких внешних библиотек в моем коде не используется, причем я подключил все, может не в той последовательности подключил?
0
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 106
12.05.2014, 16:10  [ТС]
Моя тема совсем затерялась, пожалуйста подскажите как мне правильно, без ошибок, скомпилировать свой проект.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2014, 16:10
Помогаю со студенческими работами здесь

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

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

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

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

Вызов функции в многофайловом проекте
Компилятор ругается на указатель на массив &quot;a&quot; , в файле main.cpp Вот файлы проекта: main.cpp/// #include &quot;iostream&quot;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru