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

Как убить 100 зайцев 1 выстрелом?

06.09.2019, 14:02. Показов 1089. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана задача: написать деревья и куууучу функций к ним. Но они все однотипные. Data хранит данные в вершине(число) Вывести data*2, вывести data+7, вывести data, если четное и т.д. Решил написать метод в классе, который просто будет принимать лямбда функцию и тогда не нужно будет писать все это) но тут ошибка
error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Tree::doForEach<class <lambda_caeb593af6657ee54755ff20215f99b2 > >(class <lambda_caeb593af6657ee54755ff20215f99b2 >)" (??$doForEach@V<lambda_caeb593af6657ee54 755ff20215f99b2>@@@Tree@@QAEXV<lambda_ca eb593af6657ee54755ff20215f99b2>@@@Z) в функции _main
1>SIAOD-2kurs.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

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
main.cpp
 
#include "Tree.h"
 
int main()
{
    std::vector <uint64_t> inputData;
    inputData.reserve(6);
    //for (size_t i = 0; i < 5; ++i){
        inputData.push_back(2);
        inputData.push_back(1);
        inputData.push_back(3);
        inputData.push_back(5);
        inputData.push_back(4);
        inputData.push_back(6);
    //}
    std::cout << std::endl;
    Tree myTree(&inputData);
    myTree.print();
    myTree.getSize();
    std::cout << myTree.getChecksum();
 
    myTree.doForEach([](auto i) {
        cout << i << std::endl;
    });
}

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
Tree.h
 
#pragma once
#include <inttypes.h>
#include <iostream>
#include <vector>
#include <algorithm>
 
typedef struct vertex
{
    uint64_t Data;
    vertex* Left = nullptr;
    vertex* Right = nullptr;
}Vertex;
 
 
class Tree
{
private:
    std::vector<uint64_t>* inputVector = nullptr;
    Vertex*  _Root = nullptr;
    double   _Sum = 0.0;
    uint64_t _Size = NAN;
 
    void     __print(Vertex* vertex); 
    void     __addNode(uint64_t inputData, Vertex*& vertex);
    uint64_t __getSize(Vertex* Vertex);
    uint64_t __getAverageHeight(Vertex* Vertex, size_t length);
    uint64_t __getChecksum(Vertex* vertex);
 
    template <typename LYAMBDA>
    void __doForEach(Vertex*, LYAMBDA f);
 
public:
    Tree(std::vector <uint64_t>*);
 
    void     addNode(uint64_t);
    uint8_t  getHeight(Vertex*);
    void     getSize();
    double   getAverageHeight();
    uint64_t     getChecksum();
    void     print();
 
    template <typename LYAMBDA>
    void doForEach(LYAMBDA f);
 
    //void printTree(Vertex*);
};
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Tree.cpp
 
#include "Tree.h"
 
Tree::Tree(std::vector <uint64_t>* inputArr)
{
    inputVector = inputArr;
    for (std::vector<uint64_t>::iterator it = inputVector->begin(); it != inputVector->end(); it++){
        __addNode(*it, _Root);
    }
}
 
void Tree::__addNode(uint64_t inputData, Vertex*& vertex)
{
    if (vertex == nullptr)
    {
        vertex = new Vertex;
        vertex->Data = inputData;
        vertex->Left = vertex->Right = nullptr;
    }
    if (inputData < vertex->Data) {
        if (vertex->Left != nullptr)
            __addNode(inputData, vertex->Left);
        else {
            vertex->Left = new Vertex;
            vertex->Left->Left = vertex->Left->Right = nullptr;
            vertex->Left->Data = inputData;
        }
    }
    if (inputData > vertex->Data) {
        if (vertex->Right != nullptr)
            __addNode(inputData, vertex->Right);
        else {
            vertex->Right = new Vertex;
            vertex->Right->Left = vertex->Right->Right = nullptr;
            vertex->Right->Data = inputData;
        }
    }
}
 
void Tree::addNode(uint64_t inputData){
    __addNode(inputData, _Root);
}
 
uint8_t Tree::getHeight(Vertex* vertex)
{
    if (vertex == nullptr)
        return 0;
    else 
        return uint8_t((1 + std::max(getHeight(vertex->Left), getHeight(vertex->Right))));
}
 
uint64_t Tree::__getSize(Vertex* Vertex)//TODO
{
    if (Vertex == nullptr)
        return 0;
    else
          return uint64_t((1 + __getSize(Vertex->Left) + 
                    __getSize(Vertex->Right)));
}
 
void Tree::getSize(){
    _Size = __getSize(_Root); 
}
 
 
 
double Tree::getAverageHeight()
{
    _Sum = __getAverageHeight(_Root, 1);
 
    if (_Size != _Size)
        _Size = __getSize(_Root);
 
    return _Sum / _Size;    
}
 
uint64_t Tree::__getAverageHeight(Vertex* Vertex, size_t length) {
    if (Vertex == nullptr)
        return 0;
    else {
        return uint64_t(length + __getAverageHeight(Vertex->Left, length + 1)
            + __getAverageHeight(Vertex->Right, length + 1));
    }
}
 
uint64_t Tree::getChecksum()
{
    return uint64_t(__getChecksum(_Root));
}
 
uint64_t Tree::__getChecksum(Vertex* vertex) {
  if (vertex == nullptr) 
      return 0;
 
  return vertex->Data + __getChecksum(vertex->Left) +
         __getChecksum(vertex->Right);
}
 
void Tree::__print(Vertex* vertex) 
{
    if (vertex == nullptr)
        return;
 
    __print(vertex->Left);
    std::cout << vertex->Data;
    __print(vertex->Right);
}
 
void Tree::print() {
    __print(_Root);
}
 
template <typename LYAMBDA>
void Tree::doForEach(LYAMBDA f) {
    __doForEach(_Root, f);
}
 
template <typename LYAMBDA>
void Tree::__doForEach(Vertex* vertex, LYAMBDA f) {
  if (vertex == nullptr) 
      return;
 
  __doForEach(vertex->Left, f);
  f(vertex->Data);
  __doForEach(vertex->Right, f);
}
Что не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2019, 14:02
Ответы с готовыми решениями:

Убить двух зайцев
У кого-нибудь есть предложения, как совместить процесс изучения программирования и физики?

Сессию нужно убить memberid нужно принудительно убить и страницы... как ?
&lt;SCRIPT LANGUAGE=VBScript RUNAT=Server&gt; SUB Session_OnStart Session.Timeout = 3 Application.lock Application('visitors') =...

Как найти нужное значение из формулы: 8.39=100/2.6+100/X-100
Здравствуйте люди. Помогите, если можете найти число &quot;х&quot; из формулы: 8.39=100/2.6+100/X-100 Добавлено через 1 час 6 минут да уж....

3
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,384
06.09.2019, 20:44
функционалы имеют булев тип
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
06.09.2019, 20:50
Цитата Сообщение от welasdkljb Посмотреть сообщение
Что не так?
Уж сколько раз твердили: определения шаблонов должны располагаться в заголовочном файле.

Цитата Сообщение от vlisp Посмотреть сообщение
функционалы имеют булев тип
???
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,384
06.09.2019, 20:52
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
???
что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2019, 20:52
Помогаю со студенческими работами здесь

Найти общую величину урона, нанесённого Годзилле выстрелом
Арнольд Шварценеггер стреляет в ужасного монстра Годзиллу из дробовика. Нужно найти общую величину урона, нанесённого Годзилле выстрелом. ...

Программа подсчета зайцев
Пример программы со стр. 57 Самоучителя на тему &quot;Метка&quot;.. В чём смысл этой программы. После запуска она зацикливаетэ LABEL m1, met5; ...

Какова вероятность поразить цель с произвольной дистанции одним выстрелом.
Стрельба по мишени может вестись с каждой из дистанций 600, 500 и 300м. Вероятности поражения цели с этих дистанций соответственно равны...

Какова вероятность того, что мишень будет поражена хотя бы одним выстрелом?
Здравствуйте. Решаю такую задачу: Команда состоит из двух стрелков. Вероятность попадания в мишень одним выстрелом для первого стрелка...

Объяснить задачу про охотника и зайцев
Вот условие задачи: Хороший охотник, ная расположение (координаты х и у) n зайцев может выстрелить так, чтобы одним выстрелом убить...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru