我是C++的初學者,但我有一些使用Java的經驗。我收到一些我不明白的錯誤。我附上了錯誤控制檯的圖片和它下面的代碼。爲什麼我得到這些'已經定義'的鏈接器錯誤?
Error 1 error LNK2005: "public: __thiscall VectorDouble::VectorDouble(void)" ([email protected]@[email protected]) 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)" ([email protected]@[email protected]@Z) already defined in Main.obj C:\Users\carrea\Code\Visual Studio\COMP201\Lab8_VectorDoubleClass\VectorDouble.obj Lab8_VectorDoubleClass
....
10個更多的錯誤喜歡這些和
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
Main.cpp的
#include "VectorDouble.cpp"
using namespace std;
void printVD(const VectorDouble& 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& v)
{
int n = v.size();
for(int i = 0; i<n; i++)
{
cout << v.getElementAt(n) << " ";
}
cout << endl;
}
VectorDouble.h
#pragma once
#include <fstream>
#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
#include <vector>
#include <sstream>
using namespace std;
class VectorDouble
{
public:
VectorDouble(void);
~VectorDouble(void);
VectorDouble(int intSize);
// Copy constructor
VectorDouble(const VectorDouble& vd);
// = override
void operator =(const VectorDouble& 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);
};
VectorDouble.cpp
#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 << "vector with " << this->count << " is destroyed";
}
// Copy constructor
VectorDouble::VectorDouble(const VectorDouble& vd)
{
int mcVD = vd.capacity(), i=0;
max_count = mcVD;
dArray = new double[max_count];
clear();
while(i<max_count)
{
dArray[i] = vd.getElementAt(i);
i++;
}
}
// = override
void VectorDouble::operator =(const VectorDouble& RIGHT_SIDE)
{
int rightCount = RIGHT_SIDE.size(), i=0;
while(rightCount>max_count)
{
resize();
}
while(i<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 < 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<max_count)
resize();
}
// Sets every element to 0
void VectorDouble::clear(void)
{
for(int i = 0; i < max_count; i++)
dArray[i] = 0;
}
任何幫助,將不勝感激......
你不應該#包括「VectorDouble.h」? – 2011-03-17 00:20:17
轉到CodeReview.SE? – 2011-03-17 00:21:19
複製分配沒有正確實現('void operator =(const VectorDouble&RIGHT_SIDE);')。一般來說,它應該返回一個參考。 – Mahesh 2011-03-17 00:27:36