Дополнительная информация из инструкций по принципам и практике программирования 3ed неясна

В книге Страуструпа по PPP сказано, что мне следует добавлять #include "PPP.h" в начале моих программ. Итак, я захожу на сайт книги .

Где он перечисляет

Я не вижу реального объяснения того, как это реализовать.

И вот ошибки, которые я получаю из списка ошибок после попытки собрать это самостоятельно:

На «Как использовать модули?» ссылка, там лишь кратко упоминается, как включить использование модулей. Что я уже сделал:

Microsoft С++

При использовании Visual Studio.

  • Файлы модулей имеют суффикс .ixx.
  • Установите свойства вашего проекта. Вкладка: Проект -> Привет, проект.
    • Общие свойства: установите для параметра «Стандарт языка C++» значение «последний».
    • Общие сведения о C/C++: Сканировать дополнительные зависимости модулей: «да»

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

// main.cpp
import test_module;

#include <iostream>

int main() {
    int result = add(5, 3);
    std::cout << "Result: " << result << std::endl;
    return 0;
}

и

// test_module.ixx
export module test_module; // use this syntax

export int add(int a, int b) {
    return a + b;
}

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

// ConsoleApplication1.cpp
#include "PPP.h"

int main()
{
    cout << "This is simplified compared to the actual program\n";
}
// PPP.h
import PPP;
using namespace PPP;
using namespace std;

// disgusting macro hack to guarantee range checking for []:
#define vector Checked_vector
#define string Checked_string
#define span Checked_span
// PPP.ixx
export module PPP;

export import std;

#define PPP_EXPORT export
#include "PPP_support.h"
using namespace PPP;

тогда у меня тоже есть

// PPP_support.h
[...]

Какой код я получил по указанной ссылке PPP_support.h

Настройки моего проекта выглядят так: и это:

И это ошибки, которые я получаю из списка ошибок:

И из окна вывода:

Build started at 7:27 PM...
1>------ Build started: Project: ConsoleApplication1, Configuration: Debug x64 ------
1>Scanning sources for module dependencies...
1>Compiling...
1>PPP.ixx
1>C:\dev\ppp3\ConsoleApplication1\PPP_support.h(86,25): error C2182: 'simple_error': this use of 'void' is not valid
1>(compiling source file 'PPP.ixx')
1>C:\dev\ppp3\ConsoleApplication1\PPP_support.h(86,38): error C2065: 'string': undeclared identifier
1>(compiling source file 'PPP.ixx')
1>C:\dev\ppp3\ConsoleApplication1\PPP_support.h(86,45): error C2146: syntax error: missing ')' before identifier 's'
1>(compiling source file 'PPP.ixx')
1>C:\dev\ppp3\ConsoleApplication1\PPP_support.h(87,2): error C2143: syntax error: missing ';' before '{'
1>(compiling source file 'PPP.ixx')
1>C:\dev\ppp3\ConsoleApplication1\PPP_support.h(87,2): error C2447: '{': missing function header (old-style formal list?)
1>(compiling source file 'PPP.ixx')
1>Done building project "ConsoleApplication1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 7:27 PM and took 00.407 seconds ==========

Я также пробовал не использовать модули (хотя думаю, это должно сработать, потому что мой небольшой тест модуля тестирования программы сработал) и использовать «заголовок «PPPheaders.h» на случай, если вам придется вернуться к использованию файлов заголовков». Но и это мне не удалось, потому что я думаю, что

#define PPP_EXPORT 
#include "PPP_support.h" 

возвращает меня к исходной точке.

Я очень надеюсь, что кто-нибудь сможет мне помочь. Я только что купил книгу на этой неделе с большим волнением и с нетерпением жду возможности изучить C++.

Я также читал некоторые другие форумы с вопросами по этому же вопросу, но не смог найти конкретного ответа. Единственное решение, которое я вижу на данный момент, — не использовать этот модуль/заголовок «поддержки», а просто import std; или #include <iostream>. Но там сказано, что использование этого рекомендуется для упражнений, описанных в книге более глубоко.

Большое спасибо!

Примечание: никогда не используйте using namespace; в файлах заголовков!

Pepijn Kramer 06.09.2024 07:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

стандарт отсутствует: //PPP_support.h

PPP_EXPORT inline void simple_error(std::string s)  // write ``error: s'' and exit program (for non-exception terminating error handling)
{
    std::cerr << "error: " << s << '\n';
    exit(1);
}

проверьте разницу:

У него есть using namespace std;

3CxEZiVlQ 06.09.2024 05:00

@3CxEZiVlQ Где находится using namespace std; в файле PPP_support?

Minxin Yu - MSFT 06.09.2024 05:07

Вы можете использовать «Поиск на этой странице» в своем браузере.

3CxEZiVlQ 06.09.2024 05:15

@3CxEZiVlQ Я не нашел. скриншот

Minxin Yu - MSFT 06.09.2024 05:16

Другие вопросы по теме