Ошибки компиляции при попытке связать <boost \ property_tree \ json_parser.hpp>

0

У меня есть следующий файл "includes" в моем проекте.

#pragma once

//glm
#include <glm\glm.hpp>
#include <glm\ext.hpp>
#include <glm\gtc\matrix_transform.hpp>

//glew
#include "GL\glew.h"

//glfw
#define GLFW_DLL
#include "GLFW\glfw3.h"

//libpng
#include <png.h>

//std
#include <stdio.h>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <list>
#include <memory>
#include <iostream>
#include <fstream>
#include <assert.h>

//boost
#include <boost\filesystem.hpp>
#include <boost\property_tree\json_parser.hpp> /* problem */

//mandala
#include "types.h"
#include "type_traits.h"
#include "hash.h"
#include "macros.h"

Когда я включаю <boost\property_tree\json_parser.hpp>, я получаю много ошибок, указывающих, что я переопределяю APIENTRY например, этот:

1>c:\program files (x86)\windows kits\8.0\include\shared\minwindef.h(130): warning C4005: 'APIENTRY' : macro redefinition

Я недоумеваю, почему это происходит. Я попытался подавить файл minwindef.h от обработки, поставив #define _MINWINDEF_ перед оператором include, но безрезультатно. Кто-нибудь еще сталкивался с этим или имел какое-либо представление о том, как я могу правильно включить эту библиотеку повышения?

ЗАМЕТКА

  • 1
    То, что вы цитировали, есть предупреждение , а не ошибка. Но иметь сразу несколько разных заголовков - это очень неправильно. Либо вы включаете ненужные заголовки, либо нарушаете SRP в классе, который реализован в этом файле. Или оба.
  • 0
    Извините, у меня есть предупреждения как ошибки. Есть также несколько макроопределений, которые вызывают ошибки, такие как minwindef.h объявляющий near и far ; имена, которые я широко использовал в своем коде.
Показать ещё 4 комментария
Теги:
boost

2 ответа

1
Лучший ответ

Поскольку youd не обновлял ваш вопрос, чтобы отражать изменения в сделанных вами предложениях, а также не предоставлять все предупреждающее сообщение, я могу только догадываться:

У вас все еще есть glfw.h включен перед boost lib, который включает в себя заголовок WinAPI. Потому что, когда я просто google для "переопределения APIENTRY", я получаю этот вопрос SO как первый результат, включая ответ: поместите заголовок WinAPI (или заголовок форматирования, который включает их) до того, как glfw.h.

  • 0
    Перемещение glfw включает в себя только соответствующие файлы, решившие проблему. Спасибо. :)
  • 0
    @cmbasnett Урок, чтобы извлечь уроки из этого: пожалуйста, используйте Google, прежде чем спрашивать о SO. Вы часто получите свой ответ намного быстрее.
-2

Вы можете также включить ptree.

    #include <boost/property_tree/ptree.hpp>
  • 0
    И каким образом это удалит включение заголовков WinAPI?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню