C++语言中允许声明全局变量,并且类成员的实现是在类的外部,因此经常会遇到作用域的问题。这里简单列出来平时遇到的一些问题。
一、类成员函数定义中的参数
一个简单的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
T
{
public
:
typedef
double
Num;
void
setValue(Num num);
private
:
Num value;
};
void
T::setValue(Num num)
{
this
->value = num;
}
|
其中,Num是在类T中定义的类型,setValue是类T的成员函数的定义(在类外部),因此setValue一定是在类的作用域范围内的,当然形参表也在类的作用域内。因此上面的用法是合法的。
二、成员函数的返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
T
{
public
:
typedef
double
Num;
Num getValue();
private
:
Num value;
};
Num T::getValue()
{
return
this
->value;
}
|
与形参类型相比,返回值的类型位于成员函数体的前边,因此C++不认为Num是在类的作用域内,如果对上面的代码进行编译,编译器会报错。正确的写法是:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
T
{
public
:
typedef
double
Num;
Num getValue();
private
:
Num value;
};
T::Num T::getValue()
{
return
this
->value;
}
|
FROM: http://www.cnblogs.com/bigwangdi/archive/2012/12/17/2822541.html