Как использовать глобальные функции внутри модуля без использования файла заголовкаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать глобальные функции внутри модуля без использования файла заголовка

Сообщение Anonymous »

У меня есть функция, определенная в main.cpp . Я хочу вызвать его внутри модуля Hello. Файл hello.cppm Экспортный модуль hello с реализацией в hello.cpp . Файлы вырезаны и вставлены из более крупных файлов, поэтому могут возникнуть ошибки компиляции. Они должны быть близки. (Компилятор Explorer IDE не будет делать для меня модули.)
Вопрос в том, где я могу поместить объявление об внешнем кажется вероятным) hello.cppm ? Я пробовал позиции до и после различных операторов . Большинство генерируют ошибки компилятора. Где это сейчас, он собирает, но не будет связывать. Я подозреваю, что это считается неэкспортируемым модулем hello функция. >? Это учебный эксперимент. В заголовке все работает, но это не нужно для одной функции. p> ошибка линкера. < /p>
function `main':
main.cpp:(.text.startup+0x1c): undefined reference to `mod::HelloAgain@Hello::operator()() const'
/usr/bin/ld: libHello.a(hello.cpp.o): in function `mod::Hello@Hello::operator()() const':
hello.cpp:(.text+0x1d): undefined reference to `hello_func_global@Hello[abi:cxx11]()'
< /code>
main.cpp
#include
#include
using namespace std::literals;

auto hello_func_global() -> std::string {
return "Hello from a global function."s;
}
import Hello;

auto main() -> int {
mod::Hello();
constexpr mod::Hello hello;

constexpr mod::HelloAgain hello_again;
hello_again();

std::cout void;
};
}
< /code>
hell0.cpp
module Hello;
extern auto hello_func_global() -> std::string;

using namespace std::literals;

namespace mod {
auto Hello::operator()() const -> void {
hello_func_global();
std::cout
cmake_minimum_required(VERSION 3.28.3)
project(Hello)

add_library(Hello)

target_sources(Hello
PUBLIC
FILE_SET CXX_MODULES
FILES Hello.cppm
PRIVATE
hello.cpp
hello_again.cpp
)

set_target_properties(Hello PROPERTIES CXX_MODULE_TYPE GLOBAL)


Подробнее здесь: https://stackoverflow.com/questions/794 ... eader-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»