Re: invalid use of template-name 'Array' without an argument(compile error, plz help)
"io_x" <a@b.c.invalid> ha scritto nel messaggio
news:4df31901$0$13975$4fafbaef@reader2.news.tin.it...
"eric" <cneric12lin0@gmail.com> ha scritto nel messaggio
news:45d301c5-8cbd-41c9-bc6d-b2bcea79c7fc@d26g2000prn.googlegroups.com...
#ifndef Array_H
#define Array_H
...
here i not meet problems but i write all i understand 80%
and not write all i not understand or *not want to unserstand*
than i have problem of formatting code, i understand only
my formatting way
i don't know if sizeof(*(rhs.ai)) has the result the
correct number, somoene has to try it
2 try; some error found, don't know if it compile
#include <stdint.h>
#include <stdlib.h>
#define u32 uint32_t
#define u8 uint8_t
template < class elemType >
class Array {
public:
// parameterize element type
Array(u32 size = 0)
{if(size>0xFFFF)
{ia_=0; size_=-1;}
else if(size==0)
{ia_=0; size_= 0;}
else {size_=-1; ia_=0;
if(sizeof(elemType)>0xFFF) return;
ia_=(elemType*) malloc(size* sizeof(elemType));
cout << (void*)ia_;
cout << " here in Array() elementsz= " << sizeof(elemType) << "\n";
if(ia_==0) return;
size_=size;
}
}
elemType& operator[](u32 index){ return ia_[index]; }
Array(Array& rhs )
{if(rhs.size_==-1||sizeof(*(rhs.ia_))!=sizeof(elemType))
{size_=-1; ia_=0; return;}
else {u32 i;
size_=-1; ia_=0;
if(rhs.size_>0xFFFF) return;
if(sizeof(*(rhs.ia_)) > 0xFFF) return;
ia_=(elemType*) malloc(rhs.size_ * sizeof(elemType));
cout << (void*)ia_;
cout << " sizeelm==" << sizeof(elemType) << "\n";
if(ia_==0) return;
size_=rhs.size_;
for(i=0; i<size_; ++i)
*this[i]=rhs[i];
}
}
~Array(){ cout << "~" << (void*)ia_ << "\n"; free(ia_);}
u32 operator==(Array& a)
{u32 i;
if(sizeof(*(rhs.ai))!=sizeof(elemType))
return 0;
if(a.size_!=size_)
return 0;
for(i=0; i<size_; ++i)
{if(a[i]!=*this[i]) return 0;
}
return 1;
}
u32 operator!=(Array& a){return !(*this==a)}
u32 size(void){return size_; }
u32 size_;
elemType* ia_;
};
#include <iostream.h>
int main(void)
{u32 array_size=4;
u32 ix;
Array<u32> ia(array_size); // elemType becomes u32
Array<double> da(array_size); // elemType becomes double
Array<char> ca(array_size); // elemType becomes char
Array<u32> iia(ia);
if(ia.size_==(u32)-1||da.size_==(u32)-1||ca.size_==(u32)-1||
iia.size_==(u32)-1)
{cout << "Errore memoria insufficiente\n";
return 0;
}
for(ix=0; ix<array_size; ++ix )
{ia[ix]=ix;
da[ix]=ix * 1.75;
ca[ix]=ix + 'a';
}
for(ix=0; ix<array_size; ++ix )
std::cout << "[ " << ix << " ] ia: " << ia[ix]
<< "\tca: " << ca[ix]
<< "\tda: " << da[ix] << "\n";
return 0;
}
------------
862fd4 here in Array() elementsz= 4
863068 here in Array() elementsz= 8
86308c here in Array() elementsz= 1
86309c sizeelm==4
[ 0 ] ia: 0 ca: a da: 0
[ 1 ] ia: 1 ca: b da: 1.75
[ 2 ] ia: 2 ca: c da: 3.5
[ 3 ] ia: 3 ca: d da: 5.25
~86309c
~86308c
~863068
~862fd4