Eine Variable, mehrere Dateien, die diese verwenden -> Problem°!°
-
jau, vielen dank, perfekt!
-
Hallo,
Ich würd dir noch empfehlen, das nicht inner Header zu machen...
Das kann schnell zu Fehlern führen...
Lieber so:Main.cpp
int iSample; char szBuffer; long lNumber; // initialisieren und verwenden // ...Demo.cpp
extern int iSample; extern char szBuffer; extern long lNumber; // verwenden // ......nur so als kleiner Nachtrag

-
Woher hast Du denn das bitte?
Die Variablen extern in einem Header zu deklarieren und in einem Codefile einmal zu definieren ist der einzig gangbare Weg um Fehler zu vermeiden, Deine Methode ist weit fehlerträchtiger.
-
hmm also bei mir hats die Kombination gemacht...ich hab extern jetzt verwendet, aber -wie CodeFinder gesagt hat- ohne Header, denn mit hats nicht funktioniert (gleiche Compiler-Fehler)...und so funktioniert das prächtig!
Also Dank sowohl an akari und CodeFinder

@LordJaxom:
Zu welchen Fehlern kann denn das deiner Meinung nach führen...hast du vllt. n Beispiel ?und danke nochmal an alle

cya
-
Ganz einfach:
Normalerweise definiere ich die Variablen in einer Übersetzungseinheit und packe gleich die Extern-Deklaration in den Header. Wenn ich jetzt an einer dieser Stellen den Datentyp ändere und an der anderen nicht, gibt es einen Fehler in eben jener ÜE.Wenn ich in jedes Codefile die Extern-Deklaration packe, und dann den Datentyp einer dieser Variablen ändern will,
a) muss ich das an mehr als zwei Stellen tun (nämlich in JEDEM Codefile wo dies verwendet wird)
b) wird mich der Compiler nicht warnen wenn ich eine Stelle vergesse.Davon ab, ist Code per Copy&Paste von einem Codefile ins andere zu befördern sehr sehr unschön

-
Hi LordJaxom...
Also das hab ich ja versucht...:
Ganz einfach:
Normalerweise definiere ich die Variablen in einer Übersetzungseinheit und packe gleich die Extern-Deklaration in den Header. Wenn ich jetzt an einer dieser Stellen den Datentyp ändere und an der anderen nicht, gibt es einen Fehler in eben jener ÜE.Aber es hat die gleichen Fehler verursacht, wie ich oben schon gepostet hab...
Kannst du mir vllt. n kleinen Beispielcode schreiben der das demonstriert...wär echt nett!thx schonmal!

-
Naja wenn Du Dich nicht vertippt hast ist es genau akaris Beispiel:
Im Header
#ifndef _GLOBAL_AFX_H_ #define _GLOBAL_AFX_H_ /* ======================= System Module Dependencies ========================== */ #include <Windows.h> /* ============================= Global Variables ============================== */ /// Definition extern HMODULE g_hmDllLanguage; extern HINSTANCE g_hInst; extern HWND g_hwndMain; #endif /* _GLOBAL_AFX_H_ */Und in einem (beliebigen, falls es keine global_afx.cpp gibt) .cpp-File
HMODULE g_hmDllLanguage; HINSTANCE g_hInst; HWND g_hwndMain;
-
Aber ich muss doch
Erst die Header inkludieren, um dann die Vars definieren oder ?// ... #include "GlobalAfx.h" // ... HMODULE g_hmDllLanguage; HINSTANCE g_hInst; HWND g_hwndMain; // ...so, oder ? ...
das hab ich gemacht, das hat aber nicht funktioniert...und die Compilermeldungen, haben nicht auf einen Tippfehler hingeweisen (
Bei einem: "Ein oder mehrere mehrfach definierte Symbole gefunden" ...ist ja keine Tippfehler, sondern was generelles zu 'vermuten' oder ?)
-
Du solltest erst den Header inkludieren, um o.a. Problem aus dem Weg zu gehen. Ansonsten kann es höchstens sein dass nicht alles neucompiliert wurde. Wenn die Dinger nur in einer cpp-Datei ohne extern stehen, gibt es keine multiple symbols mehr.
-
LordJaxom schrieb:
Woher hast Du denn das bitte?
...
Jo, das war prinzipiell nur n Zitat aus nem anderen Forum, habs mal ausprobiert (hätte ich vllt. mal vorher machen solln^^ -sry-) und LordJaxom hat Recht...es ist besser das inner Header zu machen...ALSO nochmal resümieren:
Header.h:
#ifndef _HEADER_H_ #define _HEADER_H_ extern int iSample; extern long lSample; extern char szBuffer[100]; #endif /* _HEADER_H_ */Main.cpp:
#include <iostream> #include "Header.h" int iSample; long lSample; char szBuffer[100]; int main() { // externe, globale Variablen initialisieren/verwenden: // ... // Beispiel: iSample = 23; lSample = 789; strcpy(szBuffer, "Hallo"); return (0); }in weiteren möglichen Dateien:
z.B.:Demo.cpp:
#include <iostream> #include "Header.h" // hier verwenden... // ... // Beispiel: iSample = 45; lSample = 899; strcpy(szBuffer, "Welt!");so...hoffe das war korrekt

PS: Hab den Code NICHT getestet, aber er sollte ja nur das Prinzip demonstrieren!