Trouble with SList for generic Stack class
H. S. Teoh via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jun 2 15:27:34 PDT 2017
On Fri, Jun 02, 2017 at 10:21:07PM +0000, Mark via Digitalmars-d-learn wrote:
> Hello,
>
> I am trying to make a class that can accept any type as an argument.
>
> Here is the class:
>
>
> import std.container: SList;
>
>
> class Stack {
>
> private SList!T list;
> private int _size;
>
> this(T)() {
> list = SList!T;
> _size = 0;
> }
>
> public void push(T)(T item) {
> list.insertFront(item);
> _size++;
> }
>
> public void pop(T)() {
> if(_size > 0){
> list.removeFront();
> _size--;
> }
> }
>
> public int getSize() { return _size; }
>
> }
>
>
> When I compile with dmd, I get this error:
>
> Stack.d(6): Error: undefined identifier 'T'
>
> That's on the line private SList!T list;
Yes, because T is not specified when .list is declared. What you need
to do is to put the template parameter on your class instead of your
methods, something like this:
class Stack(T) {
private SList!T list;
private int _size;
this() { // N.B. no template parameter here
list = SList!T;
_size = 0;
}
public void push(T item) { // N.B. no template parameter here
...
}
...
}
T
--
What do you get if you drop a piano down a mineshaft? A flat minor.
More information about the Digitalmars-d-learn
mailing list