C++ - 关于解引用和类的前置声明

时间:2021-04-26 20:02:44

1. 示例程序1:

 1 class A;
 2 
 3 void fun(A & rA) // ok: 引用不需要完整定义
 4 {
 5 }
 6 
 7 int main()
 8 {
 9     A * pA; // ok: 指针不需要完整定义
10     *pA; // error: error C2027: use of undefined type 'A'
11 
12     return 0;
13 }

2. 示例程序2:

 1 class A;
 2 
 3 void f(A a); // ok
 4 
 5 void g(A a) // error: error C2027: 使用了未定义类型“A”
 6 {
 7 }
 8 
 9 int main()
10 {
11 
12     return 0;
13 }

3. 涉及到模板范例3:

 1 template <class T>
 2 class A;
 3 
 4 void f(A<int> a); // ok
 5 
 6 void g(A<int> a) // error: error C2027: 使用了未定义类型“A<T>”
 7 {
 8 }
 9 
10 int main()
11 {
12     return 0;
13 }

4. 涉及到模板范例4:

 1 template <class T>
 2 class A;
 3 
 4 int main()
 5 {
 6     A<int> * pA; // ok: 模板实例化指针,注意,虽然出现了A<int>,但是不需要模板完整定义
 7     *pA; // error: error C2027: use of undefined type 'A' with [ T = int ],需要模板完整定义
 8 
 9     return 0;
10 }