C++ C++;返回NULL的指针
尝试从函数返回更新到指针。仅作为背景,这是一个类似stl向量的模板。这是返回函数C++ C++;返回NULL的指针,c++,C++,尝试从函数返回更新到指针。仅作为背景,这是一个类似stl向量的模板。这是返回函数 //////////////////////////////////////////////////////////////////////////////// //removes an item from the array const T& remove(int pos) { if(pos > cnt) pos = cnt; if(pos < 0)
////////////////////////////////////////////////////////////////////////////////
//removes an item from the array
const T& remove(int pos)
{
if(pos > cnt)
pos = cnt;
if(pos < 0)
pos = 0;
static T v;
for(int i,k = 0; i < cnt; i++,k++)
{
if(i == pos)
{
v = element[i];
i++;
}
else
element[k] = element[i];
}
cnt--;
return v;
}
/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//从数组中删除项
常数T和移除(内部位置)
{
如果(位置>cnt)
pos=碳纳米管;
如果(位置<0)
pos=0;
静态tv;
对于(inti,k=0;i
我正在尝试更新的指针变量:
TVector<Member*> members;
Member* backmember;
backmember = members.remove(members.size()-1);
TVector成员;
会员*后台会员;
backmember=members.remove(members.size()-1);
但是backmember总是返回null。我肯定我错过了一些简单的东西,只是不确定是什么。有什么想法吗?如果您有任何问题,请提前告诉我,谢谢。我不认为这会初始化
I
:
for(int i,k = 0; i < cnt; i++,k++)
for(int i,k=0;i
尝试将其更改为此并测试:
for(int i = 0,k = 0; i < cnt; i++,k++)
for(int i=0,k=0;i
用于(int i,k=0;i
i,k
使用逗号运算符,按顺序计算参数,返回最后一个参数的结果。这意味着“声明i,然后声明k并将其设置为0”
i
未设置。因此,它很可能从内存中获取了一些大的随机值,而您的循环从未运行过。只是好奇,为什么您不能使用而不是编写自己的方法。remove
返回一个常量t&
。您的backmember
接受一个指针,它与引用不同。它还接受一个非常量
指针。所以这两种情况说明这个代码是错误的。你确定这是有问题的代码吗?这是如何编译的,更不用说返回NULL
?创建要返回的对象的静态副本是个坏主意-这意味着两个线程不能同时访问不同的数组。如果你想返回被删除的值,你应该按值来做。是的,我知道这不是我正常的编程风格。我必须填写函数,返回类型必须匹配。我知道一般的规则是不要把工作分配给stackoverflow,但我知道我忽略了一些简单的事情。这就是当java讲师教授C时发生的情况:)OP可能给人的印象是int i,k=0
初始化i
和k
,而它只将k
初始化为0。当然,这正是您刚才所说的,我只是想更详细地说明:)此外,我个人认为包含多个变量的for
循环是尽可能避免的。它们很难一目了然地阅读和理解。
for(int i,k = 0; i < cnt; i++,k++)