我正在尝试将int数组x插入int * v。这是我的代码。请为我提供最佳解决方案及其背后的原因。
此行中有错误。与其复制数组值,不如将其取为垃圾值。第v1 = x行;
class vector
{
int *v;
int size;
public:
vector(int m)
{
v = new int[size = m];
for (int i = 0; i < size; i++)
v[i] = 0;
}
vector(int *a)
{
for (int i = 0; i < size; i++)
v[i] = a[i];
}
int operator *(vector &y)
{
int sum = 0;
for (int i = 0; i < size; i++)
sum += v[i] * y.v[i];
return sum;
}
void disp()
{
for (int i = 0; i < size; i++)
cout << v[i] << " ";
cout << "\n";
}
};
int main()
{
clrscr();
int x[3] = { 1,2,3 };
int y[3] = { 4,5,6 };
vector v1(3);
//v1.disp();
vector v2(3);
v2.disp();
v1 = x;
v1.disp();
//v2=y;
v2.disp();
int r = v1 * v2;
cout << "R = " << r;
getch();
return 0;
}
答案 0 :(得分:1)
您忘记在vector
类中添加赋值运算符:
vector & operator=(int *a)
{
for (int i = 0; i < size; i++)
v[i] = a[i];
return *this;
}
答案 1 :(得分:0)
在线
v1=x;
可能是,您希望它调用第二个构造函数,该构造函数以int*
作为参数。但这不会发生。
可以看作是从基本类型到类类型的类型转换。我们希望可以调用适当的构造函数。
参见http://www.hexainclude.com/basic-to-class-type-conversion/
但是请记住,构造函数在对象创建后将仅被调用一次。
在此行
vector v1(3);
第一个构造函数已经被调用。然后一行
v1=x;
现在不会调用第二个构造函数。
对于每个类,=
运算符默认为重载。这就是为什么我们可以轻松地将对象彼此分配的原因。
因此,行v1=x
调用默认的重载赋值=
运算符。
在这里,它将数组x的地址,即&x[0]
视为类对象的地址。由于它不是vector class
对象的地址
=>会导致分段错误。
您的答案
要将int
数组分配给int pointer
,即int* v
的成员变量vector class
,
=
。 或
vector v1=x; // modify the class constructor to have size as a constant.