title: Why am I getting these 'already defined' linker errors?
body: <p>I am a beginner at C++ but I have some experience using Java. I am getting some errors that I don't understand. I attached a pic of the error console and the code below it.</p>
  
  <pre><code> Error  1   error LNK2005: "public: __thiscall VectorDouble::VectorDouble(void)" (??0VectorDouble@@QAE@XZ) already defined in Main.obj  C:\Users\carrea\Code\Visual Studio\COMP201\Lab8_VectorDoubleClass\VectorDouble.obj  Lab8_VectorDoubleClass
  
   Error  2   error LNK2005: "public: __thiscall VectorDouble::VectorDouble(int)" (??0VectorDouble@@QAE@H@Z) already defined in Main.obj  C:\Users\carrea\Code\Visual Studio\COMP201\Lab8_VectorDoubleClass\VectorDouble.obj  Lab8_VectorDoubleClass
  ....    
  </code></pre>
  
  <p>10 more errors like these and</p>
  
  <pre><code> Error  13  error LNK1169: one or more multiply defined symbols found   C:\Users\carrea\Code\Visual Studio\COMP201\Lab8_VectorDoubleClass\Debug\Lab8_VectorDoubleClass.exe  1   1   Lab8_VectorDoubleClass
  </code></pre>
  
  <p>Main.cpp</p>
  
  <hr>
  
  <pre><code>#include "VectorDouble.cpp"
  using namespace std;
  void printVD(const VectorDouble&amp; v);
  int main()
  {
      VectorDouble p;
      p.push_back(1);
      p.push_back(4);
      p.push_back(3);
      VectorDouble v(p);
      printVD(v);
      printVD(p);
  }
  void printVD(const VectorDouble&amp; v)
  {
      int n = v.size();
      for(int i = 0; i&lt;n; i++)
      {
          cout &lt;&lt; v.getElementAt(n) &lt;&lt; " ";
      }
      cout &lt;&lt; endl;
  }
  </code></pre>
  
  <p>VectorDouble.h</p>
  
  <hr>
  
  <pre><code>#pragma once
  #include &lt;fstream&gt;
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;cstdlib&gt;
  #include &lt;iomanip&gt;
  #include &lt;vector&gt;
  #include &lt;sstream&gt;
  using namespace std;
  class VectorDouble
  {
  public:
      VectorDouble(void);
      ~VectorDouble(void);
      VectorDouble(int intSize);
      // Copy constructor
      VectorDouble(const VectorDouble&amp; vd);
      // = override
      void operator =(const VectorDouble&amp; RIGHT_SIDE);
  private:
      double *dArray;
      int count, max_count;
  public:
      // returns number of occupied cells
      int size(void) const;
      // Returns total number of cells
      int capacity(void) const;
      // Adds an element to array
      void push_back(double num);
      // Resizes the array to be double the original max_count
      void resize(void);
      // Returns element at specified index
      double getElementAt(int i) const;
      // Requests that the capacity of the allocated storage space for the elements of the vector container be at least enough to hold n elements
      void reserve(int n);
  private:
      // Sets every element to 0
      void clear(void);
  };
  </code></pre>
  
  <p>VectorDouble.cpp</p>
  
  <hr>
  
  <pre><code>    #pragma once
  #include "VectorDouble.h"
  
  using namespace std;
  
  VectorDouble::VectorDouble(void)
  {
      max_count = 100;
      count = 0;
      dArray = new double[max_count];
      clear();
  }
  
  VectorDouble::VectorDouble(int intSize)
  {
      max_count = intSize;
      dArray = new double[max_count];
      clear();
  }
  
  VectorDouble::~VectorDouble(void)
  {
      cout &lt;&lt; "vector with " &lt;&lt; this-&gt;count &lt;&lt; " is destroyed";
  }
  
  // Copy constructor
  VectorDouble::VectorDouble(const VectorDouble&amp; vd) 
  {
      int mcVD = vd.capacity(), i=0;
      max_count = mcVD;
      dArray = new double[max_count];
      clear();
      while(i&lt;max_count)
      {
          dArray[i] = vd.getElementAt(i);
          i++;
      }
  }
  // = override
  void VectorDouble::operator =(const VectorDouble&amp; RIGHT_SIDE)
  {
      int rightCount = RIGHT_SIDE.size(), i=0;
      while(rightCount&gt;max_count)
      {
          resize();
      }
      while(i&lt;rightCount)
      {
          dArray[i] = RIGHT_SIDE.getElementAt(i);
          i++;
      }
      count = i;
  }
  // returns number of occupied cells
  int VectorDouble::size(void) const
  {
      return count;
  }
  // Returns total number of cells
  int VectorDouble::capacity(void) const
  {
      return max_count;
  }
  // Adds an element to array
  void VectorDouble::push_back(double num)
  {
      if(count==max_count)
      {
          resize();
      }
      dArray[count] = num;
      count++;
  }
  // Resizes the array to be double the original max_count
  void VectorDouble::resize(void)
  {
      double *p = new double[max_count*2];
      for(int i = 0; i &lt; count; i++)
      {
          p[i] = dArray[i];
      }
      dArray = p;
      max_count*=2;
      delete p;
  }
  
  
  // Returns element at specified index
  double VectorDouble::getElementAt(int i) const
  {
      return dArray[i];
  }
  
  
  // Requests that the capacity of the allocated storage space for the elements of the vector container be at least enough to hold n elements
  void VectorDouble::reserve(int n)
  {
      while(n&lt;max_count)
          resize();
  }
  
  
  // Sets every element to 0
  void VectorDouble::clear(void)
  {
      for(int i = 0; i &lt; max_count; i++)
          dArray[i] = 0;
  }
  </code></pre>
  
  <p>Any help would be much appreciated...</p>