Есть ли оптимальный способ использования предварительно скомпилированных заголовков в нескольких проектах? - PullRequest
0 голосов
/ 16 января 2020

У меня есть решение с 2 проектами, один из которых - stati c library, а другой - приложение, которое

ссылается на него. В библиотеке stati c у меня есть предварительно скомпилированный заголовочный файл со следующим кодом:

#pragma once

//C standard Library
#include <stdio.h>

//C++ Standard Library
#include <iostream>
#include <fstream>
#include <sstream>
#include <memory>
#include <functional>

//Data Structures
#include <string>
#include <vector>
#include <array>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>

Я также добавил необходимый файл. cpp и настроил свойства проекта для использования этой спецификации c скомпилированный заголовок pre-

. Я также добавил .h файл в начало каждого. cpp файла по мере необходимости. Я перешел к моему

последнему проекту и правильно сослался на библиотеку stati c и написал некоторый простой код, вот пример

:

class Test : public Craft::Application
{
public:
    Test()
    {

    }

    ~Test()
    {

    }
};

Craft::Application* Craft::CreateApplication()
{
    return new Test;
} 

Это вернуло тест объект будет связан с точкой входа и пройдет через конвейер, и

встретит код из библиотеки std, вот когда я получаю следующие ошибки:

  • ошибка C2039: 'строка': не является членом сообщения 'std'
  • : см. объявление 'std'
  • ошибка C3646: 'Заголовок': неизвестный спецификатор переопределения
  • ошибка C4430: отсутствует спецификатор типа - предполагается. Примечание: C ++ не поддерживает default-int
  • ошибка C2039: «строка»: не является членом сообщения «std»
  • : см. Объявление «std»
  • ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int
  • ошибка C2143: синтаксическая ошибка: отсутствует ',' before '&'
  • ошибка C2065: 'title': необъявленный идентификатор
  • ошибка C2065: «ширина»: необъявленный идентификатор
  • ошибка C2065: «высота»: необъявленный идентификатор
  • ошибка C2614: «Craft :: Window :: WindowProps»: недопустимая инициализация элемента: «Заголовок» не является базой или элементом
  • ошибка C2039: «unique_ptr»: не является членом сообщения «std»
  • : см. объявление «std»
  • ошибка C2143: синтаксическая ошибка: отсутствует ';' до '<' </li>
  • ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int
  • ошибка C2238: неожиданные маркеры перед ';'

Я понимаю, что этот проект не распознает файлы заголовков в моем предварительно скомпилированный заголовок. Я могу

подтвердить, что, поскольку я включил эти файлы в приложение, это решило все ошибки. Это вызывает много вопросов

: Этот проект связан с библиотекой, так почему же он не распознает этот предварительно скомпилированный заголовок

? Каково лучшее решение для этого? Это предварительно скомпилированный заголовок для проекта? Это что-то

совсем другое?

1 Ответ

0 голосов
/ 18 января 2020

Решение состоит в том, чтобы просто включить ваш pch в каждый исходный файл и добавить все необходимые заголовки, используемые файлом заголовка. Компилятор по-прежнему будет использовать pch, но также сможет определять ваши функции в заголовочном файле.

...