Linkerfehler LNK2005 - ???



  • Hallo Internet,
    ich hoffe ihr könnt mir helfen diesen Fehler zu verstehen. Ich bekomme mehrfach (12 mal) den Fehler LNK2005 "class std::vector<class Personal,class std::allocator<class Personal> > mitarbeiter" (?mitarbeiter@@3V?vector@VPersonal@@V?vector@VPersonal@@V?allocator@VPersonal@@@std@@@std@@A) ist bereits in main.obj definiert. allerdings mit allen drei vector(en?) und in allen fünf .cpp dateien die ich benutze.

    Hier nur mal die Classen.h und die main.cpp Dateien:

    main.cpp:

    #include"Classen.h"
    
    int main()
    {
    	std::locale::global(std::locale("German"));
    	int wahl{ 0 };
    
    	while(wahl !=9){
    		std::cout << "Haupmenü:\n\n"
    			<< "<1> neu\n"
    			<< "<2> ändern\n"
    			<< "<9> beenden\n";
    		std::cin>>wahl;
    		switch (wahl) {
    		case 1: {neu_menu();
    			break; }
    		case 2: {andern_menu();
    			break; }
    		case 9: return 0;
    		}
    	}
    
    	return 0;
    }
    

    und die Classen.h:

    #pragma once
    #ifndef classen_h
    #define classen_h
    #include<locale>
    #include<iostream>
    #include<string>
    #include<vector>
    
    enum class Getreide : int { Leer, Körnermais, Hächselmais, Raps, Weizen, Gerste, Roggen, Tritkale, Mist, Gülle };
    
    class Personal
    {
    public:
    	void neu_Personal();
    	std::string getname();
    	bool getfrei();
    	unsigned int getpers_nr();
    	void setZugmasch(std::string);
    	void fahrzeug();
    private:
    	std::string nname = "neu";
    	std::string vname = "neu";
    	unsigned int gehalt{ 400 };
    	unsigned int persnr{ 0 };
    	std::string Zugmasch = "unbekannt";
    };
    class Silo
    {
    public:
    	void neu_silo();
    	void art_andern();
    
    private:
    	unsigned int silo_nr{ 0 };
    	Getreide art{ Getreide::Leer };
    	unsigned int max_vol{ 1000 };
    	unsigned int vol{ 0 };
    };
    class Zugmaschienen
    {
    public:
    	void neue_Zugmasch();
    	void fahrer();
    	std::string getname();
    	int getfz_nr();
    	bool getfrei();
    	void setfahrer(std::string);
    private:
    	std::string name;
    	unsigned int fznr;
    	unsigned int gewicht;
    	unsigned int maxzuglast;
    	std::string aktFahrer = "unbekannt";
    };
    void neu_menu();
    void andern_menu();
    
    std::vector<Personal> mitarbeiter;
    std::vector<Zugmaschienen> zugmaschienen;
    std::vector<Silo> silos;
    
    #endif
    

    Ich habe gar keinen Schimmer was ich da falsch mache. 😕
    Ich habe auch schon im Internet nachgeschaut, aber ich werde einfach nicht schlau daraus.

    Also schon mal danke für jede Hilfe...



  • Alle fünf cpp module includieren classen.h und definieren somit die drei globalen variablen, welche, da sie nicht als static definiert sind, exportiert werden, sodass andere module sie nutzen können. Der Linker finder das aber garnicht gut, wenn drei verschiede module ein symbol mit gleichem namen exportieren.
    Du musst es wie bei funktionen und methoden machen, die drei variablen nämlich nur deklarieren und sagen, dass sie in einem anderen modul definiert sind. Das geht mit 'extern' davor. Besser ist es globale Variablen ganz zu vermeiden.


Anmelden zum Antworten