So verwenden Sie globale Funktionen in einem Modul, ohne eine Header -Datei zu verwendenC++

Programme in C++. Entwicklerforum
Guest
 So verwenden Sie globale Funktionen in einem Modul, ohne eine Header -Datei zu verwenden

Post by Guest »

Ich habe eine Funktion in main.cpp definiert. Ich möchte es im Modul Hello aufrufen. Die Datei hello.cppm exportiert Modul Hallo mit der Implementierung in Hello.cpp . Die Dateien werden aus größeren Dateien geschnitten und eingefügt, sodass Kompilierungsfehler auftreten können. Sie sollten nah sein. (Compiler Explorer IDE würde für mich keine Module machen scheinen wahrscheinlich) hello.cppm ? Ich habe Positionen vor und nach den verschiedenen Modul - -Anweisungen ausprobiert. Die meisten erzeugen Compiler -Fehler. Wo es jetzt ist, kompiliert es, aber nicht verknüpft. Ich vermute, es wird als nicht exportiertes Modul Hello Funktion angesehen. >? Dies ist ein Lernexperiment. In einem Header funktioniert alles, aber es sollte nicht für eine einzelne Funktion erforderlich sein. P> Der Linker -Fehler. < /p>

Code: Select all

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)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post