tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
675
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kafkef kafkef ist offline Rookie
    Registriert seit
    Nov 2011
    Beiträge
    8
    Hallo,
    komme leider nicht weiter. Problem ist mit Inkluden von Dateien

    Fehlermeldung:
    PHP-Code:
    1>gui.obj error LNK2005"int ziffer1" (?ziffer1@@3HAist bereits in calc.obj definiert.
    1>gui.obj error LNK2005"int a" (?a@@3HAist bereits in calc.obj definiert
    Anbei die Dateien:

    main.cpp:
    PHP-Code:
    #pragma once
    #include "main.h"

    int main()
    {
        
    gui::einlesen();
        
    calc::calculate(a,b,c,d,operand);
        
    gui::printout(ziffer1,ziffer2,overflow_char);


    main.h:
    PHP-Code:
    #pragma once
    #include <iostream>
    #include <string>
    #include "calc.h"
    #include "gui.h"

    using namespace std;
    int a,b,c,d;
    char operand
    calc.cpp:
    PHP-Code:
    #include "main.h"

    namespace calc
    {
        
    void calculate(int aint bint cint dchar operand)
        {
            
            if(
    operand=='+')
            {
                
    ziffer2=b+d;
                if(
    ziffer2>10)
                {
                    
    a++;
                    
    ziffer2=ziffer2%10;
                }

                
    ziffer1=a+c;
                if(
    ziffer1>10)
                    
    overflow_char='x';
            }
            else
            {
                if(
    b<d)
                {
                    
    b+=10;
                    
    c++;
                }
                
    ziffer2=b-d;
                
    ziffer1=a-c;

            }

        }

    calc.h:
    PHP-Code:
    #pragma once

    char overflow_char='\0';
    int ziffer1,ziffer2;
    namespace 
    calc
    {
        
    void calculate(int aint bint cint dchar operand);
        

    gui.cpp:
    PHP-Code:
    #include "main.h"
    namespace gui
    {
        
    void einlesen(void)
        {
            
    cout<<"Bitte geben Sie die vier Ziffern ein: ";
            
    cin>>a>>b>>c>>d;
            
    cout<<"Bitte geben Sie '+' oder '-' ein: ";
            
    cin>>operand;
        }

        
    inline void printout(int a,int bchar overflow_char)
        {
            if(
    overflow_char=='x')
            {
                
    cout<<"OVERFLOW";
            }
            else
            {
                
    cout<<"Ergebnis: "<<ziffer1<<ziffer2<<endl;
            }
        }

    gui.h:
    PHP-Code:
    #pragma once

    #include "main.h"

    namespace gui
    {
        
    void einlesen(void);
        
    inline void printout(int a,int bchar overflow_char);

    Ich danke euch im voraus
     

  2. #2
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    Probier mal das du ziffer eins als extern erstellst. Oder vll in einem anderen namespace und dann
    MeinNameSpace::ziffer1 = 123;
    Habe leuder kein Zeit gehabt den Code vollständig zu lesen werde morgen nochmal drüber gucken
    Und bitte verbessert mich falls was falsch ist
     
    Fehlermeldung bitte!
    Google - Dein Freund und Helfer

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Man darf in Header Dateien keine Definitionen vornehmen. Definitionen gehören in genau eine Kompilationseinheit (also .cpp Datei).

    Außerdem ist es keine gute Idee "using namespace" in Headerdateien zu notieren (Stichwort: namespace pollution).

    Weiterhin solltest du dir aussagekräftigere Namen für Variablen überlegen. (Was soll a, b, c, d sein? Ziffern sind Symbole 0 bis 9 (Dezimalsystem))...?)

    Und letztendlich sind globale Variablen kein wirklich guter Stil.
    Code cpp:
    1
    2
    3
    4
    5
    
    // main.h
     
    // (Vorwärts-) Deklaration
    extern int a, b, c, d;
    extern char operand;
    Code cpp:
    1
    2
    3
    4
    5
    
    // main.cpp
     
    // Definition
    int a, b, c, d;
    char operand;
    Gruß

    PS: Dasselbe gilt natürlich auch für die anderen Variablen die du in der calc.h definiert hast.
    Geändert von deepthroat (22.11.11 um 07:28 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    kafkef kafkef ist offline Rookie
    Registriert seit
    Nov 2011
    Beiträge
    8
    danke dir deepthroat. Deine Empfehlung hat mich gerettet.Das Programm läuft nun.
     

  5. #5
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Man könnte auch bei Projektoptionen->Linker->Befehlszeile /FORCE hinzuschreiben.


    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von cwriter Beitrag anzeigen
    Man könnte auch bei Projektoptionen->Linker->Befehlszeile /FORCE hinzuschreiben.
    Was allerdings nicht wirklich empfehlenswert und nur ein letzter Ausweg ist.

    http://msdn.microsoft.com/en-us/library/70abkas3.aspx
    Afile created with this option may not run as expected. The linker will not link incrementally when the /FORCE option is specified.
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. error LNK2005
    Von samkirchner im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 27.08.09, 11:10
  2. error LNK2005 und #pragma once
    Von noZmo im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 21.07.09, 08:07
  3. Antworten: 8
    Letzter Beitrag: 02.03.09, 11:16
  4. [C++]Klasse in main.obj bereits definiert Fehler
    Von Sebastian Thalhammer im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 26.06.08, 16:02
  5. Konstanten bereits definiert
    Von Stelo im Forum PHP
    Antworten: 3
    Letzter Beitrag: 13.04.07, 15:20