Sono abbastanza nuovo di C++ e questo sito quindi ci sono necessariamente errori. Quando provo a compilare il mio codice ottengo errori come error: missing template argument before 'b'
. Ho cercato nel mondo risposte per ore e mi ha portato qui.Che cosa significa "argomento modello mancante"?
Il mio compito è quello di implementare una classe di modelli Collection che memorizza una raccolta di oggetti utilizzando un array, lungo con la dimensione corrente della raccolta.
#include <iostream>
#include "collection.h"
using namespace std; v
int main(int argc, char* argv[])
{
collection b; //<----error missing template argument before 'b'
return 0;
}
#ifndef COLLECTION_H
#define COLLECTION_H
#include <iostream>
template <typename obj>
class collection
{
public:
collection();
bool isEmpty() const;
void makeEmpty();
void insert(obj val);
void remove(obj val);
bool contains(obj val) const;
private:
size_t size;
obj* col[];
};
#endif
#include "collection.h"
template <typename obj>
collection<obj>::collection() :size(10)
{
col = new obj*[size];
}
template <typename obj>
bool collection<obj>::isEmpty() const
{
for(size_t k = 0; k < size; k++)
{
if(col[k] != NULL)
return false;
}
return true;
}
template <typename obj>
void collection<obj>::makeEmpty()
{
for(size_t k = 0; k < size; k++)
{
col[k] = NULL;
}
}
template <typename obj>
void collection<obj>::insert(obj val)
{
int temp = 0;
for(size_t s = 0; s < size; s++)
{
if(col[s] != NULL)
temp++;
}
if(temp >= size)
{
obj* temp = new obj*[size*2];
for(size_t c = 0; c < size; c++)
temp[c] = col[c];
delete col;
col = temp;
}
else
col[temp] = val;
}
template <typename obj>
void collection<obj>::remove(obj val)
{
for(size_t x = 0; x < size; x++)
{
if (col[x] == val)
{
for(size_t y = x; y < size-1; y++)
{
col[y] = col[y+1];
}
col[size-1] = NULL;
return;
}
}
}
template <typename obj>
bool collection<obj>::contains(obj val) const
{
for(size_t z = 0; z < size; z++)
{
if(col[z] == val)
return true;
}
return false;
}
Benvenuti in SO. Questa è una prima domanda piuttosto buona, ma in futuro si prega di provare a pubblicare solo un set minimo di codice che presenta ancora il problema. In questo caso, non avevamo bisogno di leggere l'intero contenuto del modello di classe 'collection' per capire cosa c'era di sbagliato. Spesso, penso che scoprirai che passare attraverso il lavoro di minimizzazione del codice nella tua domanda ti porterà alla risposta prima ancora di pubblicarla! :-) –
Tom, Mat e Bojan sono a posto per la tua domanda immediata. Una volta risolto, avrai un problema con quel terzo file: per istanziare l'oggetto 'collection' in 'main', il compilatore dovrà vedere il costruttore. Se è in un file separato, non funzionerà. È normale lasciare l'implementazione nell'intestazione, ma se non lo fai, potresti dover "# includere" il terzo file invece di compilarlo normalmente. –
Useless