一个奇怪的问题! (已仍出去的分,收不分来了,欢迎灌水,见者有份) (50分)

  • 主题发起人 主题发起人 liao6373
  • 开始时间 开始时间
L

liao6373

Unregistered / Unconfirmed
GUEST, unregistred user!
大家看看这一段很简单的代码:
class Test
{ private:
static int len;
public:
void Length();
};
void Test::Length()
{ len = 5;
}
int main()
{ return 0;
}
编译时没错,但连接时有错,解决该问题有两个方法:
[blue]方法一:[/blue]
class Test
{ private:
static int len;
public:
void Length();
};
[red]int Test::len;
[/red]//加入该行代码
void Test::Length()
{ len = 5;
}
int main()
{ return 0;
}
[blue]方法二:[/blue]
class Test
{ private:
static int len;
public:
void Length(){ len = 5;
}
};
int main()
{ return 0;
}
谁能告诉我这是为什么?
 
怎么没人回答?是太难了?
 
不清楚,是C++吧,忘光光了,试试:
void Test::Length()
{ this->len = 5;
}
 
我自己弄明白了,是这样的:
这是static的一个特性,在类里面,声明一个static变量,这该变量属于类变量,而不是
实例变量,并且它只是一个声明,而不是定义,在编译时并没有分配空间,如果用到了这个
变量,就会产生错误。所以要想用到这个变量,一定要在类外面重新定义一下,以分配内存
空间,这样就可以使用了。如果在类里面使用这个变量,如方法二,这时编译器就为它分配
内存空间,所以没有错误。
 
遇到问题多想想嘛,不要老问问题,自己给自己找麻烦,呵呵。
 
多人接受答案了。
 
后退
顶部