С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Не видно определений функций при раздельной компиляции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Const-параметры в аргументах функции http://www.cyberforum.ru/cpp-beginners/thread1498988.html
void setAmount(const int _amoutn) А тут уже const излишен, перебор. Добавлено через 3 минуты void setDescription(const std::string& _description) { m_description = _description; } //......
C++ Что быстрее? Обращение к элементу массива или к элементу структуры? Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на вызов функции do_nothing получилось примерно такое же.... http://www.cyberforum.ru/cpp-beginners/thread1498974.html
C++ Fstream в классах
Проблема заключается в том, что я не могу использовать fsream в классе, ибо выдаёт ошибку. Код и текст ошибки ниже. Помогите пожалуйста (мб поможете и с самой задачей, условие ниже). Код весь в...
C++ Как работать с функцией SystemParametersInfo?
Чтобы установить обои рабочего стола. Пишу вот так: #include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv) { if (SystemParametersInfo ( SPI_SETDESKWALLPAPER,
C++ Ошибка при компилировании http://www.cyberforum.ru/cpp-beginners/thread1498937.html
Вот такая ошибка "Unhandled exception at 0x1027d340 (msvcr100d.dll) in 546456.exe: 0xC0000005: Access violation writing location 0xfdfdfdfd." Что делать?
C++ Вставка рисунка в RichEdit из файла,как реализовать? И чтобы сохранялось в файл при RichEdit->Lines->SaveToFile(""); подробнее

Показать сообщение отдельно
VergilYamato
3 / 2 / 0
Регистрация: 22.08.2014
Сообщений: 64

Не видно определений функций при раздельной компиляции - C++

15.07.2015, 00:15. Просмотров 261. Ответов 7
Метки (Все метки)

Описал класс и его наследника в заголовочном файле; самые громоздкие определения функций вынес в отдельные файлы, однако при компиляции/сборке эти определения не видно из файла с "main".
Здесь указан код для студии, однако при компиляции из консоли с помощью GCC - результата тоже ноль.
Студия ругается на "неразрешенный внешний символ" (подключение всех pdb-файлов, какие нашел в проекте, не помогло).
GCC прямо говорит, что не видит некоторые необходимые определения.
Все файлы абсолютно точно лежат в одной папке и подключены к проекту.
Предоставлю только один файл с определениями, потому что они абсолютно идентичны по своей структуре.

Заголовочный файл:
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
#pragma once //замена на стандартный способ через "#ifndef" ничего не дает
 
template<typename T>
class singleLinkedList
{
protected:
    struct list_elem
    {
        T el;
        list_elem *next;
    };
    list_elem *top;
    unsigned long size;
    void next_elem() { top = top->next; };
public:
    singleLinkedList() { top = NULL; size = 0; };
    bool is_empty() const { return top == NULL; };
    unsigned long list_size() { return size; };
    void show();                                        //выводим список
    virtual void add_elem(const T &elem);               //добавляем элемент
    virtual void del_elem();                            //удаляем элемент
    virtual void reverse();                             //разворачиваем список
    virtual ~singleLinkedList();
};
 
template<typename T>
class doubleLinkedList : public singleLinkedList<T>
{
private:
    struct list_elem
    {
        T el;
        list_elem *next;
        list_elem *prev;
    };
    list_elem *top;
    //unsigned long size;
    void next_elem() { top = top->next; };
    void prev_elem() { top = top->prev; };
public:
    doubleLinkedList() { top = NULL; size = 0; };
    bool is_empty() const { return top == NULL; };
    //unsigned long list_size() { return size; };
    void show() { singleLinkedList<T>::show(); };
    virtual void add_elem(const T &elem);               //добавляем элемент
    virtual void del_elem();                            //удаляем элемент
    virtual void reverse();                             //разворачиваем список
    virtual ~doubleLinkedList() { singleLinkedList<T>::~singleLinkedList(); };
};
Файл с определениями:
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
#include "stdafx.h"
#include <iostream>
#include "myList.h"
 
template<typename T>
void singleLinkedList<T>::add_elem(const T &elem)
{
    list_elem *new_el = new list_elem;
    new_el->el = elem;
    new_el->next = top;
    top = new_el;
};
template<typename T>
void singleLinkedList<T>::show()                        //выводим список
{
    list_elem *start = top;
    std::cout << "[";
    while (top != NULL)
    {
        std::cout << top->el << ", ";
        next_elem();
    }
    std::cout << "\b\b]";
    top = start;
};
template<typename T>
void singleLinkedList<T>::reverse()//разворот списка, колдуем с указателями
{
    list_elem *cur_elem = top;
    list_elem *next_elem = top->next;
    list_elem *prev_elem = NULL;
    cur_elem->next = prev_elem;
    while (next_elem != NULL)
    {
        prev_elem = cur_elem;
        cur_elem = next_elem;
        next_elem = cur_elem->next;
        cur_elem->next = prev_elem;
    }
    top = cur_elem;
};
template<typename T>
void singleLinkedList<T>::del_elem()
{
    switch (size)
    {
    case 0:
    {
        std::cout << "List is empty, imposable to delete something!";
        break;
    }
    case 1:
    {
        delete top;
        top = NULL;
        size--;
        break;
    }
    default:
    {
        list_elem *start = top->next;
        delete top;
        top = start;
        size--;
        break;
    }
    }
};
template<typename T>
singleLinkedList<T>::~singleLinkedList()
{
    list_elem *cur_el = top;
    while (top != NULL)
    {
        cur_el = top->next;
        delete top;
        top = cur_el;
        std::cout << "deleted\n";
    }
};
Файл с функцией "main":
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
#include "stdafx.h"
#include <iostream>
#include "myList.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    singleLinkedList <int> l;
    if (l.is_empty()) for (int i = 1; i<5; i++) l.add_elem(i);
    l.show();
    std::cout << "\n";
    l.reverse();
    l.show();
    std::cout << "\n";
    l.del_elem();
    l.show();
    l.~singleLinkedList();
 
    doubleLinkedList <int> l1;
    if (l1.is_empty()) for (int i = 1; i<5; i++) l1.add_elem(i);
    l1.show();
    std::cout << "\n";
    l1.reverse();
    l1.show();
    std::cout << "\n";
    l1.del_elem();
    l1.show();
    l1.~doubleLinkedList();
    int n;
    std::cin >> n;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.