无法将指针的值更改为等于另一个指针

时间:2014-09-04 00:49:04

标签: c++

我将团队作为Team对象的数组,匹配是Team对象中的Match对象数组。 thisMatch被声明为:

Match* thisMatch = new Match();

这就是我要做的事情:

&(teams[i].matches[foundMatches]) = thisMatch;
// I also tried another method:
(tams[i].matches + foundMatches) = thisMatch;

其中foundMatches是一个int。

但是,无论我做什么,我都会收到这个编译错误:

error: lvalue required as left operand of assignment
                 &teams[i].matches[foundMatches] = thisMatch;
                                                 ^

任何人都有任何关于可能出错的想法?如果需要,我可以提供更多信息,但我认为大多数信息都不相关。

2 个答案:

答案 0 :(得分:1)

您要做的是将变量分配给常量值。 teams[i].matches[foundMatches]的地址已经预定义(在您声明数组时)并且无法更改。

你要做的是改变teams[i].matches[foundMatches]的内容(进一步我假设这是一个Match对象,因为你说匹配是团队中匹配对象的数组对象)。改变内容可以通过以下方式完成:teams[i].matches[foundMatches] = *thisMatch,即将thisMath的内容*thisMath分配给数组条目。

除非您之前或之后没有使用thisMath进行任何无法直接对teams[i].matches[foundMatches]进行的操作,否则您可以使用teams[i].matches[foundMatches] = Match()并实例化对象,而不是分配内存并将其复制到teams[i].matches[foundMatches],以强制解除后续分配。

注意:请确保您在Match课程中实施了CTOR / CCTOR,因为该副本将涉及其中一个。

答案 1 :(得分:0)

teams[i].matches[foundMatches] = thisMatch;

如果假设matches包含指向匹配的指针数组,则应声明:

Match **matches;

然后你应该用:

分配它
team[i].matches = new (Match*)[num];

然后上述作业将有效。