Я не думаю, что мой код 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 и компилирую оттуда, но я бы предпочел, чтобы это было в отдельных файлах.