Ich möchte auf eine Variable in mehreren Dateien zugreifen. Ich habe verschiedene Ressourcen untersucht. Ich konnte es jedoch nicht lösen. Ich verwende cmake
, um alle Codes in diesem Projekt zu erstellen. Es folgt ein Beispiel, das genau zu meinem Problem passt. Grundsätzlich möchte ich val
42 in beiden code1.cpp
und code2.cpp
drucken. Wenn ich diese drei Dateien erstelle, klagt es: undefined reference to 'he::val' collect2: error:ld returned 1 exit status
für beide .cpp-Dateien.Wie Zugriff auf eine Variable in mumtiple cpp-Dateien enthalten Hauptabschnitt in jeder Datei?
header1.h
#ifndef HEADER1_H
#define HEADER1_H
#include <iostream>
namespace he {
extern int val;
}
#endif // HEADER1_H
code1.cpp
#include "header1.h"
#include <iostream>
using namespace he;
int func()
{
std::cout << val << std::endl;
}
int main()
{
val=20;
func();
return 0;
}
code2.cpp
#include <iostream>
#include "header1.h"
using namespace he;
int main()
{
std::cout << val << std::endl;
}
Dann, wie kann ich Variable teilen? Gibt es einen anderen alternativen Weg? –
Um eine Variable zwischen zwei cpp-Dateien zu teilen, definieren Sie sie in einer und deklarieren sie als extern in der anderen (am häufigsten über eine Header-Datei). Best Practice besteht jedoch darin, Daten in Modulen zu kapseln und den Zugriff über Funktionen oder Methoden zu ermöglichen, nicht durch direkten Zugriff auf Variablen. – nilo
Hallo, ich habe viel gesucht und 'boost :: shared_memory_object' gefunden, um nützlich zu sein. Aber dann, wenn ich versuche, ein einfaches Programm in https://theboostcpplibraries.com/boost.interprocess-managed-shared-memory (Beispiel 33.6) zu bauen, bekomme ich folgenden Fehler. 'In der Funktion boost :: interprocess :: shared_memory_object :: priv_open_or_create (boost :: interprocess :: ipcdetail :: create_enum_t, char const *, boost :: interprocess :: mode_t, boost :: interprocess :: berechtigungen const &) ':' It zeigt auch undefinierte Verweise auf 'shm_open',' shm_unlink'. –