Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Een variabele in twee bronbestanden gebruiken (C++)

davykager
2 antwoorden
  • Hallo,

    Ik gebruik Visual Studio 2005 om mijn programma te compileren/linken, maar ik krijg daarbij een fout van de linker als ik probeer om één variabele of functie in twee verschillende bronbestanden te gebruiken. Een simpel voorbeeldje:

    [b:cad72b3084]globals.h[/b:cad72b3084]
    [code:1:cad72b3084]void DoeDingen();
    unsigned int Variabel;[/code:1:cad72b3084]

    [b:cad72b3084]funcs.cpp[/b:cad72b3084]
    [code:1:cad72b3084]#include "globals.h"
    void DoeDingen()
    {
    Variabel = 3;
    }[/code:1:cad72b3084]

    [b:cad72b3084]main.cpp[/b:cad72b3084]
    [code:1:cad72b3084]#include "globals.h"
    // WinMain functie
    if (Variabel != 3)
    {
    DoeDingen();
    }[/code:1:cad72b3084]

    De linker geeft dan error LNK2005 als resultaat, ook als ik helemaal geen referentie naar Variabel maak in één van de bronbestanden. Ik weet dat bovenstaande code fout is, maar hoe moet het wel?

    Bedankt!
  • H-bestanden bevatten alleen verwijzingen (signatures) naar implementaties in cpp-bestanden. Zo weet C++ dat er ergens een functie moet zijn die er zo uitziet, zoniet dan krijg je een foutmelding van de linker. Normaliter zet je een signature van een functie die je in funcs.cpp hebt geimplementeerd in funcs.h (zelfde naam dus). Wanneer je dat niet wil bestaat er het keyword "extern". Als je dat voor je signature zet dan geef je aan dat de implementatie overal kan voorkomen. Meestal gebruik je extern niet zo vaak, alleen in h-bestanden behorende bij libraries ".lib".

    Dus "void DoeDingen()" moet "extern void DoeDingen()" worden, [i:c963ce20ce]of[/i:c963ce20ce] je moet die regel in funcs.h zetten. Indien funcs.h niet bestaat kun je gewoon een leeg bestand maken en hem aan het project toevoegen.

    Snap je nu ook wat je (niet) doet bij de regel "unsigned int Variabel"? :wink:

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.