Ich suche im Internet für eine halbe Stunde wegen eines (eigentlich einfachen und einfachen) Problems in C++. Vielleicht verpasse ich etwas, aber ich weiß nicht was. Sagen wir, ich habe 3 Dateien: "main.cpp", "dosomething.cpp" und "Header.h".C++ Compiler findet Werte im Header mehrmals definiert
"header.h":
#pragma once
#ifndef HEADER_H
#define HEADER_H
char text[] = "This is a text";
#endif // !HEADER_H
"main.cpp"
#include <stdio.h>
#include <iostream>
#include "Header.h"
using namespace std;
void main() {
cout << text << endl;
}
und "dosomething.cpp"
#include "Header.h"
void dosth() {
}
Jetzt ist der Compiler/Linker sagt mir, dass "Text" ist bereits in einer anderen Datei definiert. Warum? Ich weiß, wie Wächter-Idiome wie #pragma und #ifndef funktionieren - zumindest denke ich. Ich habe keine Ahnung, was hier falsch ist. Der Code selbst funktioniert (wenn die Überschrift in "dosomething.cpp" nicht enthalten ist).
Irgendeine Idee?
Edit: Im mit Visual Studio 2015
make '' Text' const', Sie brechen die eine Definitionsregel – David
http://stackoverflow.com/questions/7926224/header-include-guards-dont-work – Unimportant
Nur auf user1320881's Comme zu erweitern nt: Was hier passiert, ist folgendes: Wenn Sie main.cpp kompilieren, wird Header.h genau einmal eingeschlossen; Wenn Sie dosomething.cpp kompilieren, wird Header.h genau einmal eingeschlossen. und jetzt haben beide Definitionen von "Text" in und der Linker beschwert sich. Ihre Kopfwächter machen ihre Arbeit, aber dieses Problem zu verhindern, ist nicht ihre Aufgabe. –