我有原生C ++类SrcClass
,其中包含以下内容:
std::vector<shotEntry> objectsQueue;
bool getRelatedEntry(const entryToProcess *entriesDeets, int &i) const {
if (i >= (int)objectsQueue.size()) {
i = 0;
return false;}
if (!objectsQueue.size()) return false;
entriesDeets = &(objectsQueue[i++]);
return true;
}
在我的客户中,我有:
const entryToProcess *entriesDeets = NULL;
int i = 0;
while (srcObj->getRelatedEntry(entriesDeets, i)) {
当我逐步执行getRelatedEntry
形式参数时,entriesDeets
会在返回之前按预期更新。当它返回时,客户端的实际参数不会更新。
这是我在两个月后回到的一个大项目。我很确定我做的最后一次重构是介绍这些该死的 vectors
。当我弄乱标题时,编译需要很长时间。我是否对C#的初始化/ readonly / const'ness感到困惑?我可以让客户端获取只读本机对象吗?
答案 0 :(得分:3)
entriesDeets是getRelatedEntry中的局部变量。你只修改了本地,你没有影响传入的值。你需要传递对指针的引用或指向指针的指针。
答案 1 :(得分:3)
这是因为您正在设置函数参数的值。你想要:
bool getRelatedEntry(const entryToProcess **entriesDeets, int &i) const {
...
*entriesDeets = &(objectsQueue[i++]);
...
和
srcObj->getRelatedEntry(&entriesDeets, i)
答案 2 :(得分:2)
指针已更新,但它是函数内部的内部副本。如果您希望在函数外部看到该更改,则应传递引用:
// v
bool getRelatedEntry(const entryToProcess *&entriesDeets, int &i) const {
或者在C风格中使用双指针并在每次使用时在内部取消引用:
// v
bool getRelatedEntry(const entryToProcess **entriesDeets, int &i) const {
// ...
*entriesDeets = &(objectsQueue[i++]);