Как правильно включить заголовки и использовать вектор STL в приложении C ++? - PullRequest
0 голосов
/ 03 апреля 2019

Я решил попробовать 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: «вектор»: не является членом «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 голосов
/ 04 апреля 2019

Из документации Википедии :

Visual C ++ не будет компилировать что-либо до #include "stdafx.h" в исходном файле, если не выбран параметр компиляции /Yu'stdafx.h' (по умолчанию); Предполагается, что весь код в исходном коде, включая эту строку, уже скомпилирован.

Лучшее решение - избавиться от предварительно скомпилированных заголовков.

А из-за вашей ошибки C2039 она не является результатом строки std::vector<PITEMID_CHILD> APIDL;. int_least8_t - это тип, определенный в cstdint (stdint.h). Похоже, вы не включили этот заголовочный файл в свой проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...