error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup"



  • Hallo,

    bekomme folgenden Fehler (s.o.). Meine Main-Datei sieht wie folgt aus:

    int WINAPI WinMain(	HINSTANCE	hInstance,			// Instance
    					HINSTANCE	hPrevInstance,		// Previous Instance
    					LPSTR		lpCmdLine,			// Command Line Parameters
    					int			nCmdShow)			// Window Show State
    

    wie kann ich den Fehler beheben ?

    gruß,
    Gerd

    Edit: Ich benutze übrigens Visual Studio 2010



  • Stelle Dein project in den Linker Settings auf "SubSystem: Windows" um...



  • Ich habe das gleiche Problem aber wie genau komme ich da hin 😕
    Benutze Visual C++ 2008.



  • projekt|Properties|Linker|General



  • Wenn das wirklich die ganze main.cpp ist, dann hast du nur die main re-deklariert.
    Zum Ausführen brauchst du aber eine Definition der main.

    Mit anderen Worten:

    {
    return 0;
    }
    

    oä fehlt dahinter!

    /EDIT

    Grade getestet... in meinem Fall wäre es doch nur 'error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".' 🙄



  • Hallo, ich bin c++ Anfänger muß aber leider unbedingt ein kleines Programm schreiben für eine Einstellungprüfung.
    Ich benutze MVC++ 2010 Express und bekomme die folgende Fehlermeldung.

    1>------ Erstellen gestartet: Projekt: test2, Konfiguration: Debug Win32 ------
    1> test1.cpp
    1>test1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CSegment::~CSegment(void)" (??1CSegment@@QAE@XZ)" in Funktion "_main".
    1>test1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CSegment::CSegment(void)" (??0CSegment@@QAE@XZ)" in Funktion "_main".
    1>Debug\test2.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    Der Quellcode ist folgender:

    #include "stdafx.h"
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <stdlib.h>
    using namespace std;
    
    #ifndef SEGMENT_H
    #define SEGMENT_H
    
    class CSegment
    {
    	private:
    		/* member variables */
    		int row;
    		int start;
    		int end;
    	public:
    		/* constructors */
    		CSegment();
    		/* row, start, end */
    		CSegment(int, int, int);	
    		CSegment(const CSegment&);
    		/* assignment operator */
    		CSegment& operator= (const CSegment&);
    		/* destructor */
    		~CSegment();
    		/* accessors, manipulators */
    		int getStart() const;
    		int getEnd() const;
    		int getRow() const;
    		/*void setStart(int){return start;}
    		void setEnd(int){return end;}
    		void setRow(int){return row;}*/		
    };
    
    #endif /* SEGMENT_H */
    
    #ifndef REGION_H
    #define REGION_H
    
    class CRegion
    {
    	private:
    		//member variables 
    		std::vector<CSegment> segments;
    		//helper methods 
    		static bool sortCriterion(CSegment, CSegment);
    		//s1(0, 1, 4), s2(0, 7, 20), s3(1, 1, 1), ... 
    		void sortSegments();		
    		// melts all overlapping segments, 
    		s1(0, 2, 10), s2(0, 4, 20) => new s3(0, 2, 20) and delete 
    	  void meltSegments();							
    	public:
    		//constructors 
    		CRegion();
    		CRegion(std::vector<CSegment>);
    		CRegion(const CRegion&);
    		//assignment operator 
    		CRegion& operator= (const CRegion&);
    		//destructor 
    		~CRegion();
    		//accessors, manipulators 
    		void addSegments(std::vector<CSegment>);
    		//evaluation method, cout all segments 
    		void showSegments() const;				
    };
    
    #endif //REGION_H 
      //nur die funktionen hier und die main sind von mir alles andere ist vorgegeben
    
    			int CSegment::getStart () const
    			{ int start = (int)rand() % 100 + 1;
    			   return start;
    			}//random numbers between 1 and 100}
    
    			int CSegment::getEnd () const
    			{ int end = (int)rand() % 100 + 1;
    			 return end;
    			}//random numbers between 1 and 100}
    
    			int CSegment::getRow() const
    			{ int row = (int)rand() % 100 + 1;
    			  return row;
    			}//random numbers between 1 and 100
    
    int main(void)
     {
    
    	int reihe,beginn,ende;
     	CSegment segment;	
    	reihe=  segment.getRow();
    	beginn= segment.getStart();
    	ende=  segment.getEnd();
    	cout << reihe;
    	cout << beginn;
    	cout << ende ;
    
    }
    

    Gruss Bernhard

    EDIT: Codetags ergänzt!



  • Hallo, tut mir leid das habe ich übersehen: zeile 53 ist natürlich ein // Kommentar

    Gruss Bernhardhttp://www.c-plusplus.net/forum/images/smiles/rolleyes.gif



  • Hallo,

    Konstruktor und Destruktor von CSegment sind nicht definiert (wie alle anderen übrigens auch, auch die von CRegion, aber da die in main nicht genutzt werden, gibt's keine Klagen vom Linker)!

    MfG,

    Probe-Nutzer



  • MIt der Umstellung auf Subsystem Windows funktioniert es . Aber wieso eigentlich 🙂



  • Weil du versehentlich ein Projekt für eine Windows Konsolenanwendung anstatt eine normale Win32 Anwendung erstellt hast. Da geht dem Linker dann die main() ab... 😉



  • Man sagt ja immer dass diese Windows Programmierung C ist. Aber von C sieht man da nicht wirklich viel .



  • Oder sagen wir so die ganzen Defines lassen den Code fremd aussehen. Ist der Name der main eigentlich auch ein define ? In C ist es doch vorgeschrieben dass die Hauptfunktion main heißt ?


Log in to reply