C++中的陷阱果然很多,不久前又犯了一次错。我在某个头文件中定义了_UTILITY_,接着包含了它和vector头文件,结果就在之后的vector声明中就出错(显示不允许使用不完整的类型)了。这就让我很郁闷了:我明明包含了vector头文件,而且也使用using指示。在一些简单的分析和尝试之后,问题很容易就解决了。这是一个命名冲突的问题,我们之前定义的_UTILITY_和vector头文件冲突了。下面附上简单的问题代码:

  utility.h

1 #ifndef _UTILITY_
2 #define _UTILITY_
3 
4 #endif

  utility.cpp

 1 #include"utility.h"
 2 #include<iostream>
 3 #include<vector>
 4 
 5 using std::vector;
 6 using std::cout;
 7 using std::endl;
 8 
 9 int main()
10 {
11 
12     vector<int> ivec = { 1, 2, 3 };
13     //这会提示不允许使用不完整的类型
14     for (auto i : ivec)
15         cout << i << endl;
16 
17 
18     system("pause");
19     return 1;
20 
21 }

  c/c++常用的命名规范有PascalCase、camelCase、linux/unix_case以及匈牙利命名法。Google、id software等知名公司都有一套自己的C++命名规范,其中有许多地方值得我们学习。

  对于变量,个人更喜欢linux/unix风格的,比如:string user_name,而函数/方法,个人更喜欢Pascal风格的,比如:void SetName(const string s)。