访问静态成员

时间:2013-12-17 06:05:04

标签: c

我在静态方法中声明了一个静态成员。如下:

   static void temp1(param..){
        static gint x,y ;

        #TODO what you needed

        values get changed here for x,y;
   }

我想在同一个文件中以其他静态方法访问这两个。

  static void temp2 ( param .......){
         accessing the x,y
  }

我应该怎么做..?我不想声明公共成员,也不想更改方法参数。

5 个答案:

答案 0 :(得分:1)

这可能几乎是你想要的:

static gint x,y ;

static void temp1(param..){

  /* TODO what you needed */

  values get changed here for x,y;
}

static void temp2 ( param .......){
  /* accessing the x,y */
}

x和y可全局访问,但仅在文件中,就像您的静态过程一样。我认为这就像你能得到你想要的一样接近。

答案 1 :(得分:0)

你需要理解这两件事:

Scope

Lifetime

静态变量的范围仅为inside the function they are declared。他们不能在外面访问。

但是lifetime of your variables is throughout your program,即在程序运行之前它们将保留这些值。

所以也许你想在你的函数之外声明你的变量。所以而不是

static void temp1(param..){
        static gint x,y ;

        #TODO what you needed

        values get changed here for x,y;
   }

你可以

 static gint x,y ;
static void temp1(param..){
               #TODO what you needed

        values get changed here for x,y;
   }

您拥有的确切用例,我认为如果不更改第二个函数的参数就不可能。

答案 2 :(得分:0)

static int getInnerStatic(int* _x, int* _y, int ignore);

static void temp1(param..){
    static int x,y ;

    ////////////////
    if (getInnerStatic(&x,&y,1))
        return;
    ////////////////

    #TODO what you needed

    values get changed here for x,y;
}



static int getInnerStatic(int* _x, int* _y, int ignore){
    static int innerInvok = 0;
    static int x, y;

    if (innerInvok == 1){
        x = *_x;
        y = *_y;
        return innerInvok;//1
    }

    if (ignore)
        return innerInvok;//0

    innerInvok = 1;
    temp1(/*anything as param...*/);
    innerInvok = 0;

    *_x = x;
    *_y = y;

    return innerInvok;//0
}

//get static x y :
static void temp2 ( param .......){
    int getX, getY;

    getInnerStatic(&getX, &getY, 0); // <- accessing the x,y
}

答案 3 :(得分:0)

以下是您要尝试执行的操作示例:

#include <iostream>
using namespace std;

static void temp1() {
    static int x,y ;
    x = 5;
    y = 8;
}

static void temp2 (){
    cout << temp1::x << endl;
}

int main() {
    temp2()
    return 0;
}

错误消息

error: ‘temp1’ is not a class or namespace

请注意当您尝试使用范围解析运算符::访问temp1中的x时发生的错误。以下是解决这个问题的方法

#include <iostream>
using namespace std;

namespace temp {
    class temp1 {
    public:
        static int x,y;
    };
    int temp1::x = 5;
    int temp1::y = 7;
}

static void temp2 (){
    cout << temp::temp1::x << endl;
}

int main() {
    temp2();
    return 0;
}

注意命名空间不是必需的,但我用它来保存相关数据

答案 4 :(得分:0)

您无法使用现有代码来修改代码,使x和y成为静态实例变量,以便您可以在所有静态方法中访问它们。