Я новичок в программировании, и я пытаюсь реализовать простую версию ArrayList. Я получаю сообщение об ошибке, и когда я попытался найти решение, люди сказали, что это потому, что конструктор был объявлен, но не реализован. Я реализовал все конструкторы, объявленные в заголовке, поэтому я не уверен, что случилось. Некоторые советы оценили!Ошибка в C++; Невыполненные конструкторы?
Ошибка 1 Ошибка LNK2019: неразрешенный внешний символ "общественности: __thiscall ArrayList :: ArrayList (аннулируются)" (? ?? 0 $ ArrayList @ H @@ QAE @ XZ) ссылки в функции _main
ошибка 2 ошибки LNK2019: неразрешенный внешний символ "общественность: недействительный __thiscall ArrayList :: добавить (INT)" ссылка в функции _main
ошибки 3 ошибка LNK1120 (добавить @ $ ArrayList @ H @@ QAEXH @ Z?) : 2 неразрешенных внешних источника
ArrayList.h
#pragma once
#ifndef ArrayList_h
#define ArrayList_h
#include <stdexcept>
using namespace std;
template <class T>
class ArrayList
{
public:
ArrayList();
~ArrayList();
void add(T item);
void expandArray();
T get(int index);
private:
int size;
int length;
T* list;
};
#endif
//ArrayList.cpp
#include "ArrayList.h"
template <class T>
ArrayList<T>::ArrayList(){
size=1;
length=0;
list = new T(size);
for(int x=0; x<size;x++){
list[x]=NULL;
}
}
template <class T>
ArrayList<T>::~ArrayList(){
delete[] list;
}
template <class T>
void ArrayList<T>::add(T item){
if(length>=size){
expandArray();
}
list[length]=item;
length++;
}
template <class T>
void ArrayList<T>::expandArray(){
size*=2;
T* temp = new T(size);
for(int x=0;x<size;x++){
temp[x]=NULL;
}
for(int x=0;x<length;x++){
temp[x]=list[x];
}
delete[] list;
list=temp;
}
template <class T>
T ArrayList<T>::get(int index){
if(index>length||index<0){
throw out_of_range("Index out of bounds!");
}
return list[index];
}
main.cpp
#include "ArrayList.h"
int main(){
ArrayList<int>* list = new ArrayList<int>();
for(int x=0; x<=30;x++){
list->add(x);
}
return 0;
}
Прошу прощения, я все еще относительно новичок в C++ и заголовках. Я просто перемещаю всю реализацию ArrayList :: ArrayList в заголовок? Я думал, что заголовки должны использоваться только для деклараций. –
user3272701
@ user3272701 Целый класс шаблона должен находиться в заголовке. Для классов без шаблонов вы будете правы. – KitsuneYMG
... или использовать явное создание шаблона, но я думаю, что это просто смутило бы всю ситуацию, поэтому я собираюсь посидеть в углу и съесть какой-нибудь пирог. –