【发布时间】:2010-12-17 20:17:17
【问题描述】:
#include "stdafx.h"
#include <string>
#include <map>
using namespace std;
class NiftyEmailProgram {
private:
typedef map<string, string> NicknameMap;
NicknameMap nicknames;
public:
void ShowEmailAddress(const string& nickname) const
{
NicknameMap::const_iterator i = nicknames.find(nickname);
if ( i != nicknames.end() )
{
}
}
};
int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}
当我在 VC6.0 中编译上述代码时,我看到了大量的警告。如果我使用警告级别 4 并将所有警告视为错误,则 STLFilt 的输出错误如下:
Compiling...
t3.cpp
c:\devstudio_6.0\vc98\include\xtree(118): error C2220: warning treated as error - no object file generated
c:\devstudio_6.0\vc98\include\map(46): see reference to class template instantiation 'map<string,string>' being compiled
C:\TEMP\t3\t3.cpp(12): see reference to class template instantiation 'map<string,string>' being compiled
Error executing cl.exe.
t3.exe - 1 error(s), 26 warning(s)
Tool returned code: 0
现在,这段代码有什么问题,我该如何解决?
谢谢
【问题讨论】:
-
你为什么使用 12 年的编译器?
-
代码读起来很好。 VC 6.0 很可能是罪魁祸首。
-
VC 6 是罪魁祸首。 VC 8 弃用了一些完全有效的 STL 函数(例如
std::copy)。这让我每天都很烦。您必须根据具体情况禁用警告。 -
您应该询问他们是否计划升级到 Windows 98。看看它与 VC6 的现代性。
-
大家好,不要因为他保留旧的编译器而责备他——有时你依赖的库无法升级,或者大量代码不会花费——有效升级。附言我已经对我的答案进行了补充,请查看。