我在静态方法中声明了一个静态成员。如下:
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
}
我应该怎么做..?我不想声明公共成员,也不想更改方法参数。
答案 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成为静态实例变量,以便您可以在所有静态方法中访问它们。