Q:

Converting from a non-scalar type "node*" to scalar type "node" requested

This line has the error.  I have tried a lot of different edits to try and fix, but I can't seem to get it right.  What I'm implementing is a queue (using a list), and this particular line is a part of the enqueue(int item) operation.  
node obj = new node (item, <node * pointer>);

The constructor is:
node(int new_data, node * next_node ){
          data = new_data ;
          next = next_node ;
}

I have tried this line:
node * ptr = NULL;
node obj = new node (item, ptr);

But this still gives the same error.  Since this node will be the last node in the queue it shouldn't point to anything (maybe I'm approaching this the wrong way!?).  Setting a pointer to NULL works in sections prior to this code.  A great start would be to explain what the error message actually means, ie Am I passing a "node*" and it is expecting a "node" or vice-versa?  Maybe I'm missing some info on pointers, or stuff to do with the heap.  Thanks in advance for any assistance.

A:

A new-expression returns a pointer to the allocated object. So you need:
node* obj = new node(item, ptr);

That should be fairly obvious from the error message. It's telling you can't convert from a node* to a node, since you declared obj as a node. It's not referring to the arguments you are passing.
Of course, you could just not use new at all:
node obj(item, ptr);

