Я не думаю, что мой код C++ связывает мои файлы вместе

Мне трудно запустить мой код, когда они находятся в отдельных файлах. Когда я помещаю их все в main.cc, он работает просто отлично.

Я запускаю это на Ubuntu 18.04 с G++ 7.3.0-27ubuntu1~18.04, используя VS Code Runner ИЛИ G++.

Когда я пытаюсь связать файл test.cc и test.h только с функциями и без классов, это работает нормально:

test.h

#include <iostream>

void test();

test.cc

#include "test.h"

void test()
{
    std::cout << "Test\n";
}

main.cc

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


int main() { 
    test();
    return 0; 
} 

но когда я пытаюсь запустить следующее, это не работает:

main.cc

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

int main() { 
    SinglyLinkedList<int> list;

    list.Push(1);

    std::cout << list.Top() << "\n";
    return 0; 
} 

singly_linked_list.h

#ifndef SINGLY_LINKED_LIST_H
#define SINGLY_LINKED_LIST_H

#include <cstddef>

template <typename T>
struct Node
{
    T data;
    Node<T> *next;
};

template <typename T>
class SinglyLinkedList
{
  private:
    Node<T> * head_;
    std::size_t size_;

  public:
    SinglyLinkedList()
    {
        this->head_ = NULL;
        this->size_ = 0;
    }

    // push
    void Push(T data);
    // insert
    // delete
    // clear
    // length
    // get_nth
    // get_nth_from_last
    // get_middle
    // top
    T Top();
};

#endif

singly_linked_list.cc

#include "singly_linked_list.h"

template <typename T>
void SinglyLinkedList<T>::Push(T data)
{
    Node<T> * temp = new Node<T>;
    temp->data = data;
    this->size_++;

    if( this->head_ == NULL )
    {
        this->head_ = temp;
        this->head_->next = NULL;
    } 
    else
    {
        temp->next = this->head_->next;
        this->head_ = temp;
    }
}

template <typename T>
T SinglyLinkedList<T>::Top()
{
    if( this->head_ == NULL )
    {
        throw ("List is empty");
    }
    else
    {
        return this->head_->data;   
    }
}

На VS Code Runner я получаю эту ошибку:

[Running] cd "/home/mikko/workspace/review/data_structures/linked_list_singly/" && g++ main.cpp -o main && "/home/mikko/workspace/review/data_structures/linked_list_singly/"main
/tmp/ccT13cfO.o: In function `main':
main.cpp:(.text+0x30): undefined reference to `SinglyLinkedList<int>::Push(int)'
main.cpp:(.text+0x3c): undefined reference to `SinglyLinkedList<int>::Top()'
collect2: error: ld returned 1 exit status

[Done] exited with code=1 in 0.269 seconds

Когда я компилирую с G ++

g++ main.cc singly_linked_list.cc -o list
/tmp/ccqF3LJY.o: In function `main':
main.cc:(.text+0x30): undefined reference to `SinglyLinkedList<int>::Push(int)'
main.cc:(.text+0x3c): undefined reference to `SinglyLinkedList<int>::Top()'
collect2: error: ld returned 1 exit status

Этот код работает, если я помещаю все в main.cc и компилирую оттуда, но я бы предпочел, чтобы это было в отдельных файлах.

0 ответов

Другие вопросы по тегам