2013-04-09 111 views
2

我有以下实际工作来完成学习C++,我一直花费很长时间寻找答案并阅读我的所有工作,但我有点困惑,我可以澄清我在哪里我错在这里。代码如下所示:指针混淆C++

SafeArray& SafeArray::operator =(const SafeArray& other) { 
//Add code here 
return *this; 
} 

我们必须实现将一个数组分配给另一个数组的代码。现在,如果我正确理解该代码,该方法需要一个名为其他的常量“SafeArray”的形式参数。 SafeArray之后的&意味着实际的数组本身被传递,而不是一个副本,而const意味着它不能被改变。同样,该方法返回实际的数组本身,而不是它的副本。

因此,我想认为这将是一个简单的情况下创建一个指针,引用“其他”的内存位置,然后返回去引用的结果。在我试图实际编写这个想法时,我没有运气。

我试图做类似下面的东西:

SafeArray* ptr = &other; //This should have created a SafeArray pointer to the memory location of the array "other". 

这里的问题是,我得到的错误:

main.cpp:31:23: error: invalid conversion from ‘const SafeArray*’ to ‘SafeArray*’ [-fpermissive] 

我想这样做的原因是,我想的东西转换我不允许改变我能做的事情。

我可以写这样的代码:

const SafeArray* = &other; 

但我不能返回值正确要么。我在理论上显然误解了一些理论上的假设,有人可以解释我错过了什么。我非常乐意自己编写代码,但我无法完全掌握此方法调用。

+2

你大概应该做一个'other'到'this'的深层副本。 – chris 2013-04-09 03:50:11

+0

因为其他是'const',所以在分配给它之前,你需要制作它的副本。 – Patashu 2013-04-09 03:50:17

回答

1

正确定义这个操作符,你只需要复制对象SafeArrayother作为参数传递的内容到this

知道如何完成此功能的唯一方法是了解SafeArray类的内容(即数据成员)。

+0

在这种情况下,SafeArray仅以整数作为输入。我设置的两个数组是“x(10)”,它初始化长度为10的数组,然后初始化一个数组“y(5)”,并初始化长度为5.在这个例子中,它们还设置了x [3]到42什么的。从那里我有任务y = x。由于数组的长度不同,我认为在这个例子中复制不起作用。 – Scott 2013-04-09 03:59:48

+0

@gRnt,然后使被分配的长度与分配给它的长度相匹配。这是一个运行时计算的值,根据您的构造函数获取参数而不是具有模板参数的类。 – chris 2013-04-09 04:01:55

+0

我意识到,一旦我评论。我创建了如下的数组: SafeArray z(other.length_); 然后我试图运行一个for循环,表示z [i] = other [i];但我仍然有const的问题(我显然没有正确地复制它们),我会继续努力 – Scott 2013-04-09 04:05:55