如何在C ++应用程序中正确包含标头并使用STL向量?

时间:2019-04-03 00:02:54

标签: c++ stl

我决定尝试STL并使用vector而不是定制的可增长数组类。问题是我无法编译任何东西。如果我做这样的事情:

#include "stdafx.h"
#include <vector> 

std::vector<PITEMID_CHILD> APIDL;

我收到一堆类似于以下内容的消息:

  

1> c:\ program files(x86)\ Microsoft Visual Studio \ 2017 \ enterprise \ vc \ tools \ msvc \ 14.16.27023 \ include \ cstdint(23):错误C2039:'int_least8_t':不是成员“`全局命名空间”

如果我改成这个:

#include <vector> 
#include "stdafx.h"

std::vector<PITEMID_CHILD> APIDL;

我明白了:

  

1> x:\ win32testing \ vectortest \ vectortest.cpp(4):错误C2039:'vector':不是'std'的成员

在stdafx.h里面是:

#pragma once

#include <windows.h>

#include "targetver.h"

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <shlobj.h>
#include <exdisp.h>
#include <shellapi.h>
#include <shlwapi.h>
#include <atlbase.h>
#include <atlalloc.h>
#include <CommonControls.h>
// reference additional headers your program requires here
#include <CommCtrl.h>

知道发生了什么吗?

1 个答案:

答案 0 :(得分:0)

来自wikipedia documentation

  

除非未选中编译选项#include "stdafx.h"(默认情况下),否则Visual C ++不会在源文件中的/Yu'stdafx.h'之前编译任何内容。它假定源中直至该行(包括该行)的所有代码均已编译。

最好的解决方案是摆脱预编译的标头。

对于您的C2039错误,这似乎不是第std::vector<PITEMID_CHILD> APIDL;行的结果。 int_least8_tcstdintstdint.h)中定义的类型。看来您没有在项目中包含此头文件。