C ++:无法通过传递给查找器函数来重新分配空初始化的对象指针
C++: Can't reassign a null-initialized object pointer by passing to a finder function
#include <vector>
#include <iostream>
class IntObj {
public:
int num;
IntObj(int num): num(num) {}
};
bool findNum(int num, IntObj* dst, std::vector<IntObj*> intobjs) {
for(int i=0; i<(int)intobjs.size(); i++) {
if (intobjs[i]->num==5) {
dst = intobjs[i];
return true;
}
}
return false;
}
int main() {
std::vector<IntObj*> intobjs;
for(int i=0; i<10; i++) {
IntObj* io = new IntObj(i);
intobjs.push_back(io);
}
IntObj* ioptr = NULL;
findNum(5, ioptr, intobjs);
std::cout<<ioptr<<std::endl;
return 1;
}
这是一个测试程序,用于为更大的程序重现我的错误。即使 findNum 函数进入 if 语句 dst 也不会从 NULL 变为 intobjs[i].
我这样做是因为我想通过函数调用做两件事:
1.查明是否在列表中找到对象
2.如果找到对象,将对象存储到dst指针
为什么不重新分配指针变量?另外,如果有更好的方法,请告诉我。
dst
改变但 ioptr
不改变。这是两个具有两个值的不同变量,尽管 dst
首先设置为 ioptr
的值。
您还需要通过引用传递它以更改 ioptr
:
bool findNum(int num, IntObj*& dst, std::vector<IntObj*> intobjs)
#include <vector>
#include <iostream>
class IntObj {
public:
int num;
IntObj(int num): num(num) {}
};
bool findNum(int num, IntObj* dst, std::vector<IntObj*> intobjs) {
for(int i=0; i<(int)intobjs.size(); i++) {
if (intobjs[i]->num==5) {
dst = intobjs[i];
return true;
}
}
return false;
}
int main() {
std::vector<IntObj*> intobjs;
for(int i=0; i<10; i++) {
IntObj* io = new IntObj(i);
intobjs.push_back(io);
}
IntObj* ioptr = NULL;
findNum(5, ioptr, intobjs);
std::cout<<ioptr<<std::endl;
return 1;
}
这是一个测试程序,用于为更大的程序重现我的错误。即使 findNum 函数进入 if 语句 dst 也不会从 NULL 变为 intobjs[i].
我这样做是因为我想通过函数调用做两件事: 1.查明是否在列表中找到对象 2.如果找到对象,将对象存储到dst指针
为什么不重新分配指针变量?另外,如果有更好的方法,请告诉我。
dst
改变但 ioptr
不改变。这是两个具有两个值的不同变量,尽管 dst
首先设置为 ioptr
的值。
您还需要通过引用传递它以更改 ioptr
:
bool findNum(int num, IntObj*& dst, std::vector<IntObj*> intobjs)