title: C++: no matching constructor for initialization / candidate constructor not viable: requires single argument, but no arguments were provided
body: <p>I am trying to implement a linked list in C++ and don't know how to fix the error given below. I would greatly appreciate any help with debugging and, more importantly, an explanation of any underlying concepts that I don't understood regarding this error. Thanks.</p>
  
  <p>Here is my error: </p>
  
  <pre><code>linkedList.cpp:19:23: error: no matching constructor for initialization of 'NodeType'
          newnode = new NodeType;
                        ^
  ./linkedList.h:10:9: note: candidate constructor not viable: requires single argument 'str', but no arguments
        were provided
          NodeType(const std::string str);
          ^
  ./linkedList.h:4:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1
        argument, but 0 were provided
  class NodeType
        ^
  linkedList.cpp:54:29: error: no matching constructor for initialization of 'NodeType'
      NodeType* newnode = new NodeType;
                              ^
  ./linkedList.h:10:9: note: candidate constructor not viable: requires single argument 'str', but no arguments
        were provided
          NodeType(const std::string str);
          ^
  ./linkedList.h:4:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1
        argument, but 0 were provided
  class NodeType
        ^
  </code></pre>
  
  <p>Here is my NodeType class in my linkedList.h file:</p>
  
  <pre><code>  3 // define the node class
    4 class NodeType
    5 {
    6     private:
    7         std::string value;
    8         NodeType* next;
    9     public:
   10         NodeType(std::string str);
   11     friend class LinkedList;
   12 };
  </code></pre>
  
  <p>Here is the method in the linkedList.cpp file for the first error:</p>
  
  <pre><code> 10 LinkedList::LinkedList(const LinkedList&amp; src)
   11 {
   12     head = NULL;
   13     NodeType* srccur; //node that is currently in src
   14     srccur = src.head;
   15 
   16     NodeType* pre = NULL; //predecessor of the new node
   17     while (srccur != NULL) // have not finished yet
   18     {   NodeType* newnode;
   19         newnode = new NodeType;
   20         if (newnode == NULL) //dynamic allocation failed
   21             { cout &lt;&lt; "Memory allocation error" &lt;&lt; endl;
   22                 exit(1);
   23             }
   24 
   25     newnode-&gt;value = srccur-&gt;value;
   26 
   27     if (pre == NULL)    //the new node becomes the 1st node
   28         head = newnode;
   29     else    // the new node is attached to the end
   30         pre-&gt;next = newnode;
   31 
   32     newnode-&gt;next = NULL;
   33 
   34     pre = newnode;
   35     srccur = srccur-&gt;next;
   36     }
   37 };
  </code></pre>
  
  <p>Here is the method in the linkedList.cpp file for the second error: </p>
  
  <pre><code> 53 bool LinkedList::insertFirst(string v){
   54     NodeType* newnode = new NodeType;
   55 
   56     if (newnode == NULL) // dynamic allocation failed
   57     {
   58         return false;
   59     }
   60 
   61     newnode-&gt;value = v;
   62     newnode-&gt;next = head;
   63 
   64     head = newnode;
   65 
   66     return true;
   67 };
  </code></pre>