Неразрешенный внешний символ при компиляции проекта

Пишу курсач на тему "Дерево Меркла для хеш функций", написал код реализации дерево меркла, сам хеш-генератор взял у https://github.com/okdshin, при попытки компиляции main.cpp, который содержит следующий код

#include <iostream>
#include "TreeStruct.h"

int main() {
    std::vector<Node*> leaves;

    //create sample data
    leaves.push_back(new Node(hash_sha256("aksl;fjk;kla")));
    leaves.push_back(new Node(hash_sha256("1234")));
 
    // initialize leaves
    for (unsigned int i = 0; i < leaves.size(); i++) {
        leaves[i]->left = NULL;
        leaves[i]->right = NULL;
    }

    MerkleTree* hashTree = new MerkleTree(leaves);
    std::cout << hashTree->root->hash << std::endl;
    hashTree->printTree(hashTree->root, 0);

    for (unsigned int k = 0; k < leaves.size(); k++) {
        delete leaves[k];
    }

    delete hashTree;

    return 0;
}

Получаю ошибку

Ошибка LNK2019 ссылка на неразрешенный внешний символ "public: __thiscall Node::Node(class std::basic_string<char,struct std::char_traits,class std::allocator >)" (??0Node@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) в функции _main. Mercle_tree_cour C:\Users\Konstantin\source\repos\Mercle_tree_cour\Mercle_tree_cour\main.obj 1

При этом в самой реализации дерева меркла тоже все вроде как нормально

#include <string>
#include <unordered_map>
#include <iostream>
#include <iomanip>
#include "SHA256.h"
#include <vector>
#include "misc.h"
#include <string>
#include "TreeStruct.h"

using namespace std;


MerkleTree::MerkleTree(std::vector<Node*> blocks) {
    std::vector<Node*> nodes;
    while (blocks.size() != 1) {
        printNodeHashes(blocks);
        for (unsigned int l = 0, n = 0; l < blocks.size(); l = l + 2, n++) {
            if (l != blocks.size() - 1) { 
                nodes.push_back(new Node(hash_sha256(blocks[l]->hash + blocks[l + 1]->hash))); 
                nodes[n]->left = blocks[l]; 
                nodes[n]->right = blocks[l + 1];
            }
            else {
                nodes.push_back(blocks[l]);
            }
        }
        std::cout << "\n";
        blocks = nodes;
        nodes.clear();

    }
    this->root = blocks[0];
}

MerkleTree::~MerkleTree() {
    deleteTree(root);
    std::cout << "Tree deleted" << std::endl;
}

void MerkleTree::printTree(Node* n, int indent) {
    if (n) {
        if (n->left) {
            printTree(n->left, indent + 4);
        }
        if (n->right) {
            printTree(n->right, indent + 4);
        }
        if (indent) {
            std::cout << std::setw(indent) << ' ';
        }
        std::cout << n->hash[0] << "\n ";
    }
}

void MerkleTree::deleteTree(Node* n) {
    if (n) {
        deleteTree(n->left);
        deleteTree(n->right);
        n = NULL;
        delete n;
    }
}

Но компилятор и на него показывает мол есть ошибка "Неразрешенный внешний символ"

Ошибка LNK2001 неразрешенный внешний символ "public: __thiscall Node::Node(class std::basic_string<char,struct std::char_traits,class std::allocator >)" (??0Node@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z). Mercle_tree_cour C:\Users\Konstantin\source\repos\Mercle_tree_cour\Mercle_tree_cour\Mercle_tree_cour.obj 1

Помогите понять в чем может быть проблема

UPD:

misc.h

#pragma once
#ifndef MISC_H
#define MISC_H

#include <iostream>
#include <string>
#include "TreeStruct.h"
#include "SHA256.h"

inline std::string hash_sha256(std::string src_str) {
    std::string hash_hex_str = picosha2::hash256_hex_string(src_str);
    return hash_hex_str;
}

inline void printNodeHashes(std::vector<Node*> v) {
    for (unsigned int a = 0; a < v.size(); a++) {
        std::cout << v[a]->hash << std::endl;
    }
}
#endif
TreeStruct.h

#pragma once
#include <vector>
#include <string>
#include <iostream>
#include "Node.h"
#include "SHA256.h"
#include "misc.h"

struct MerkleTree {
    Node* root;
    MerkleTree(std::vector<Node*> blocks);
    ~MerkleTree();
    void printTree(Node* n, int indent);
    void deleteTree(Node* n);
};
Node.h

#pragma once
#ifndef NODE_H
#define NODE_H

#include <string>

struct Node {
    std::string hash;
    Node* left;
    Node* right;

    Node(std::string data);
};

#endif


Ответы (0 шт):