我的类A中声明了静态函数:
static fun(myStru *p,int count);
在类B中调用是这样的:
myStru *pp;
pp=new myStru[count1];
fun(pp,count1);
但是结果是pp的第一个结构体数据传递正确,第二个以及以后的都没有传进去。编译运行没有错误,但是调试的时候,在进入到函数fun(myStru *p,int count)处就出错了。
static fun(myStru *p,int count);
在类B中调用是这样的:
myStru *pp;
pp=new myStru[count1];
fun(pp,count1);
但是结果是pp的第一个结构体数据传递正确,第二个以及以后的都没有传进去。编译运行没有错误,但是调试的时候,在进入到函数fun(myStru *p,int count)处就出错了。
static fun(myStru *p,int count);??
改写一下看看
double a;
double b;
}myStru;
double A::fun(myStru *p;int count)
{
double s=0;
for(int i=0;i<count;i++)
s+=(p[i].a+p[i].b);
return s;
}
pp=new myStru[count1];
下面的代码是对结构体进行初始化的。
省略
fun(pp,count1);
2.建议为myStru的结构提供系析构函数和构造函数,防止值无效。
{
double s=0;
for(int i=0;i<count;i++)
s+=(p[i].a+p[i].b);
return s;
}你返回的是s,但是s是一个局部变量,它在整个函数体结束的时候,生命周期就结束了,所以当你调用它的返回值的时候,它已经不存在了,建议改写一下这个地方
把你的调用A中的静态函数的代码贴出来
double A::fun(myStru *p;int count)
{
double s=0;
for(int i=0;i <count;i++)
s+=(p[i].a+p[i].b);
return s;
} 这一段代码没有问题。至于yzcurry说的你返回的是s,但是s是一个局部变量,它在整个函数体结束的时候,生命周期就结束了,所以当你调用它的返回值的时候,它已经不存在了。你去查查msdn,看看msdn怎么解释return的,s是一个局部变量,没错,但是return时已经创建一个临时实体,因此返回并不是s,而是临时实体。
但是下面的代码会打出什么呢?
int add(int a, int b)
{
int ret;
ret = a + b;
return ret;
}
int main()
{
printf("%d\n", add(5, 5));
return 1;
}
但是下面的代码会打出什么呢?
int add(int a, int b)
{
int ret;
ret = a + b;
return ret;
}
int main()
{
printf("%d\n", add(5, 5));
return 1;
}
-------------------
为什么要用“但是”呢?难道你希望打出来的是不确定的结果吗?莫非你认为下面引用的yzcurry(什么都不会)说的是对的?double A::fun(myStru *p;int count)
{
double s=0;
for(int i=0;i <count;i++)
s+=(p[i].a+p[i].b);
return s;
}你返回的是s,但是s是一个局部变量,它在整个函数体结束的时候,生命周期就结束了,所以当你调用它的返回值的时候,它已经不存在了,建议改写一下这个地方
----------------
真长见识,如此说来return 0;也是不行的,因为0的生命周期也是在函数内部,因此函数只能返回全局变量。
/*******
/*test.cpp
/*
static int a;
则变量a只能在test.cpp中调用,如果是需要在其他文件中调用,需要将a生命为全局变量。然后在另外一个文件中加入:extern int a,就可以使用a了。
没有试,不知道对不对。