读书人

参数传递的有关问题

发布时间: 2012-04-03 12:38:19 作者: rapoo

参数传递的问题!
我的类A中声明了静态函数:
static fun(myStru *p,int count);
在类B中调用是这样的:
myStru *pp;
pp=new myStru[count1];
fun(pp,count1);
但是结果是pp的第一个结构体数据传递正确,第二个以及以后的都没有传进去。编译运行没有错误,但是调试的时候,在进入到函数fun(myStru *p,int count)处就出错了。

[解决办法]
具体什么错误信息?
[解决办法]
贴fun(pp,count1);的代码
[解决办法]
你为什么要在类A中声明了静态函数:
static fun(myStru *p,int count);??
改写一下看看

[解决办法]
结构指针定义后好像没初始化啊
[解决办法]
1.double A::fun(myStru *p;int count)这个地方是LZ输出了,还是就是这样,myStru *p;怎么是;
2.建议为myStru的结构提供系析构函数和构造函数,防止值无效。

[解决办法]
yzcurry大虾说的是一个问题,访问已经消除的局部变量肯定有问题。

至于你说的我在调用A中的静态函数的时候,参数传递出错了,但是如果将fun写到B中的话,就正确了。为什么会出现这样的情况呢?


把你的调用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了。
没有试,不知道对不对。
[解决办法]
不要生命a为静态的,函数应该也一样

读书人网 >VC/MFC

热点推荐