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

解决方案 »

  1.   

    你为什么要在类A中声明了静态函数:
    static fun(myStru *p,int count);??
    改写一下看看
      

  2.   

    typedef struct myStru{
    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;
    }
      

  3.   

    在调用之前进行了初始化的。
    pp=new myStru[count1];
    下面的代码是对结构体进行初始化的。
    省略
    fun(pp,count1);
      

  4.   

    1.double A::fun(myStru *p;int count)这个地方是LZ输出了,还是就是这样,myStru *p;怎么是;
    2.建议为myStru的结构提供系析构函数和构造函数,防止值无效。
      

  5.   

    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是一个局部变量,它在整个函数体结束的时候,生命周期就结束了,所以当你调用它的返回值的时候,它已经不存在了,建议改写一下这个地方
      

  6.   

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

  7.   

        yzcurry大虾说的是一个问题,访问已经消除的局部变量肯定有问题。    至于你说的我在调用A中的静态函数的时候,参数传递出错了,但是如果将fun写到B中的话,就正确了。为什么会出现这样的情况呢? 
     
       
          把你的调用A中的静态函数的代码贴出来
      

  8.   

        我说错了,
    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,而是临时实体。
      

  9.   

    楼上说的似乎有道理
    但是下面的代码会打出什么呢?
    int add(int a, int b)
    {
    int ret;
    ret = a + b;
    return ret;
    }
    int main()
    {
    printf("%d\n", add(5, 5));
    return 1;
    }
      

  10.   

    楼上说的似乎有道理 
    但是下面的代码会打出什么呢? 
    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的生命周期也是在函数内部,因此函数只能返回全局变量。
      

  11.   

    fun是A的成员函数,类B中调用应该写成A:fun(pp,count1),不知道你怎么通过编译的。
      

  12.   

    我记得看过书上说:
    /*******
    /*test.cpp
    /*
    static int a;
    则变量a只能在test.cpp中调用,如果是需要在其他文件中调用,需要将a生命为全局变量。然后在另外一个文件中加入:extern int a,就可以使用a了。
    没有试,不知道对不对。