title: Why can the copy constructor only take a reference argument?
body: <p>I am learning C++, and this is my first attempt to understand how copy constructors work:</p>
  
  <pre><code>class Cents
  {
  private:
      int m_nCents;
  public:
      Cents(int nCents=0)
      {
          m_nCents = nCents;
      }
  
      // Copy constructor
      Cents(  Cents cSource)
      {
          m_nCents = cSource.m_nCents;
      }
  };
  
  int main()
  {
   Cents cMark(5); // calls Cents constructor
   Cents cNancy = cMark; // calls Cents copy constructor!
   return 0;
  }
  </code></pre>
  
  <p>But I get this error:</p>
  
  <blockquote>
    <p>Error 1   error C2652: 'Cents' : illegal copy constructor: first
    parameter must not be a 'Cents'</p>
  </blockquote>
  
  <p>What is wrong in my copy constructor? </p>
  
  <p>I checked that if in the constructor I pass the parameter by reference, then it is compiling well, but won't work in the way I am doing. Why it is like that?     </p>