在项目中碰到一个问题,有关域作用符的,一开始百思不得其解,今晚终于有空查了资料,得到了答案。 用vs2008编译一共有7个错误:
Error 9 error C3083: 'SFT': the symbol to the left of a '::' must be a type d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 240 sft_server
Error 10 error C3083: 'Job': the symbol to the left of a '::' must be a type d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 240 sft_server
Error 11 error C3083: 'CreatNewMail': the symbol to the left of a '::' must be a type d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 240 sft_server
前三个错误都是一个类型的,是因为编译器在编译的时候,SFT前面的::把vector<std:wstring>和SFT连在了一起,所以会说SFT,Job,CreatNewMail不是一个类型。
Error 12 error C2039: 'groupByDesIp' : is not a member of 'std::vector<_Ty>' d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 240 sft_server
这个原因和上面三个一样,因为vector是一个类,所以编译器会说SFT,Job,CreatNewMail不是一个类型,并且groupByDesIp不是vector的一个成员。
Error 13 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 240 sft_server
由于被::连在了一起,所以函数groupByDesIp是没有返回类型的,《c++primer4》上指出,早期的c++可以接受函数没有返回类型,这种情况会将返回类型隐式的定位int型。所以就有了下面两行的错误。
Error 15 error C2440: 'return' : cannot convert from 'std::vector<_Ty>' to 'int' d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 251 sft_server
Error 16 error C2617: 'groupByDesIp' : inconsistent return statement d:/projects/src/server/window/sft_server/sft_server/creatnewmail.cpp 252 sft_server
改正方法,去掉SFT前面的::就可以了。
一开始我没有发现是这个原因,在网上搜索。发现::还有"全局"的意思。比如: 前者是一个CWnd类的成员函数,后者表示windows API接口函数(API中也有一个叫做FindWindow的函数,只不过返回类型是HWND,所以不能进行强制转换)。