C++ hauptprogramm, unterprogramm sowie header "fatal error LNK1120: 1 nicht aufgelöste Externe"



  • hallo!
    ich fasse mich lieber kurz:
    ich bin eher ein anfänger im bereich der c++ programmierung und schaffe es ständig mein programm mit mehr fatale fehlern zu erstellen als ein fehlerfreies. da mir die fehlersuche von visual studio nicht weiterhilft (beim doppelklick auf die fehlermeldung keine reaktion) frage ich mal hier nach hilfe.

    das hauptprogramm (Titel: main.cpp):

    #include"Funktionen.h"
    int ht,hm,hj,gt,gm,gj;
    bool schaltcheck;
    void main()
    {
    
    cout<<"heute tag";cin>>ht;
    cout<<"heute monat";cin>>hm;
    cout<<"heute jahr";cin>>hj;
    	cout<<"geburtstag";cin>>gt;
    	cout<<"geburtsmonat";cin>>gm;
    	cout<<"geburtsjahr";cin>>gj;
    	Schaltjahrescheck(hj,schaltcheck);
    system("pause");
    }
    

    nun dass programm mit den unterprogrammen (Titel: up.cpp):

    #include"Funktionen.h"
    bool Schaltjahrcheck(int hjup, bool tfup)
    {
    	if (hjup%4==0)
    		{
    			if(hjup%100!=0)
    				{
    					if(hjup%400==0)
    						{
    							tfup=true;
    						}
    				}
    		}
    	return(tfup);
    }
    

    und zuguterletzt der header (Titel: Funktionen.cpp):

    #include<iostream>
    using namespace std;
    
    	bool Schaltjahrescheck(int, bool);
    

    ich gebs zu: ich würd den rechner am liebsten aus dem fenster schmeißen 😃

    hoffe jemand kann mir mitteilen was ich falsch mache



  • Schaltjahrescheck != Schaltjahrcheck



  • MFK schrieb:

    Schaltjahrescheck != Schaltjahrcheck

    vielen dank 🙂



  • void main() ist müll, globale variablen auch, using namespace und unütz includierte header in headerdateien auch sowie sinnlose parameter. Und natürlich system() 😉



  • roflo schrieb:

    void main() ist müll, globale variablen auch, using namespace und unütz includierte header in headerdateien auch sowie sinnlose parameter. Und natürlich system() 😉

    Bitte werde nicht wie Wutz.



  • roflo schrieb:

    void main() ist müll, globale variablen auch, using namespace und unütz includierte header in headerdateien auch sowie sinnlose parameter. Und natürlich system() 😉

    solangs funktioniert 😛
    hab aktuell ein mathematisches problem. mir wird nach seit hinzufügen von (zeigt unterprogramm):

    int uptagedesjahres(int htup2,int hmup2,int vergangenetagejahr2,bool schaltcheckup2)
    {
    
    	for(int counter=0;counter>=hmup2-1;counter++)
    	{
    					switch(counter)
    						{case '1': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    						case '2': vergangenetagejahr2=vergangenetagejahr2+28;
    							break;
    						case '3': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    						case '4': vergangenetagejahr2=vergangenetagejahr2+30;
    							break;
    						case '5': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    						case '6': vergangenetagejahr2=vergangenetagejahr2+30;
    							break;
    						case '7': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    						case '8': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    						case '9': vergangenetagejahr2=vergangenetagejahr2+30;
    							break;
    						case '10': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    						case '11': vergangenetagejahr2=vergangenetagejahr2+30;
    							break;
    						case '12': vergangenetagejahr2=vergangenetagejahr2+31;
    							break;
    			if(schaltcheckup2==true)
    				{
    					if(counter=='2')
    						{
    							vergangenetagejahr2=vergangenetagejahr2+1;
    						}
    				}
    			}
    	}
    	return(vergangenetagejahr2);
    }
    

    (header)

    int uptagedesjahres(int, int, int, bool);
    

    (zum hauptprogramm hinzugefügt):

    int uptagedesjahres(int, int, int, bool);
    cout<<"bisher benötigte tage";cout<<vergangenetagimjahr<<endl;   //vergangenetageimjahr natürlicj zur deklaration hinzugefügt :D
    

    immer 48 bei 'cout<<"bisher benötigte tage";cout<<vergangenetageimjahr<<endl; angezeigt 😞



  • 'cout<<"bisher benötigte tage";cout<<vergangenetageimjahr<<endl;' sry, letzte klammer vergessen. im skript einfach nur cout<<"bisher benötigte tage";cout<<vergangenetageimjahr<<endl;



  • der switch geht auch ein bischen knapper zu formulieren:

    vector<int> v{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int month = 6;
    int days2 = 14;
    days2 += v[month - 1];
    


  • Da stimmen mehrere Dinge nicht. Hier sollte wohl ein kleiner oder kleiner gleich stehen:

    for(int counter=0;counter>=hmup2-1;counter++)
    

    Dann wolltest du sicher keine Anführungszeichen bei deinen case haben weil das sonst kein int mehr ist sondern kein char .



  • Biolunar schrieb:

    roflo schrieb:

    void main() ist müll, globale variablen auch, using namespace und unütz includierte header in headerdateien auch sowie sinnlose parameter. Und natürlich system() 😉

    Bitte werde nicht wie Wutz.

    Ach, Wutz würde das ganz anders machen 🙂

    @TE: 'Solange es funktioniert' ist beim programmieren nicht gut. Klar, bei kleinen Testprogrammen kann man schon mal im design schlampen, Du solltest dir aber im klaren sein, warum konstrukte wie 'void main' etc. schlecht sind.


  • Mod

    Shimozukachi schrieb:

    roflo schrieb:

    void main() ist müll, globale variablen auch, using namespace und unütz includierte header in headerdateien auch sowie sinnlose parameter. Und natürlich system() 😉

    solangs funktioniert 😛

    Das ist genau die Einstellung, mit der du in Probleme kommst. Es funktioniert eben nicht sehr lange und dann stehst du plötzlich ganz dumm da und kannst weder die resultierenden Fehler analysieren, noch beheben, noch wüsstest du, wie es überhaupt richtig ginge.



  • klassenmethode schrieb:

    der switch geht auch ein bischen knapper zu formulieren:

    vector<int> v{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int month = 6;
    int days2 = 14;
    days2 += v[month - 1];
    

    bin ein azubi, kein profi. soweit bin ich noch nicht 😞

    SeppJ schrieb:

    Shimozukachi schrieb:

    roflo schrieb:

    void main() ist müll, globale variablen auch, using namespace und unütz includierte header in headerdateien auch sowie sinnlose parameter. Und natürlich system() 😉

    solangs funktioniert 😛

    Das ist genau die Einstellung, mit der du in Probleme kommst. Es funktioniert eben nicht sehr lange und dann stehst du plötzlich ganz dumm da und kannst weder die resultierenden Fehler analysieren, noch beheben, noch wüsstest du, wie es überhaupt richtig ginge.

    wie dann?
    ich komme immernoch nicht weiter



  • Shimozukachi schrieb:

    bin ein azubi, kein profi. soweit bin ich noch nicht 😞

    Arrays kennst du aber? Statt dem vector<int> v{...} könnte man genauso gut (eigentlich sogar besser) ein int v[] = {...} schreiben.

    Shimozukachi schrieb:

    ich komme immernoch nicht weiter

    Wo hängst du denn jetzt fest?



  • sebi707 schrieb:

    Shimozukachi schrieb:

    bin ein azubi, kein profi. soweit bin ich noch nicht 😞

    Arrays kennst du aber? Statt dem vector<int> v{...} könnte man genauso gut (eigentlich sogar besser) ein int v[] = {...} schreiben.

    Shimozukachi schrieb:

    ich komme immernoch nicht weiter

    Wo hängst du denn jetzt fest?

    habe deinem tipp gefolgt.
    nun habe ich dieses unterprogramm

    int feld[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    	int tagedesjahresbisher=0;
    	for(int counter=0;counter=hmajup-1;counter++)
    	{
    		tagedesjahresbisher+=feld[counter];		
    	}
    	tagedesjahresbisher=tagedesjahresbisher+htajup;
    	return(tagedesjahresbisher);
    

    auch schon mit

    tagedesjahresbisher=tagedesjahresbisher+htajup;
    

    probiert. ständig hängt mein programm bei der rechnung fest 😞



  • Hi,

    die Abbruchbedingung in der Schleife ist ja auch Quark! Da machst du ja auch eine Zuweisung und wenn "hmajup-1" nicht zufällig 0 ergibt, wird die Bedingung auch immer wahr sein. Die Variable "hmajup" ändert sich nie in der Schleife, so dass du counter immer den gleichen Wert zuweist, was auch schon fragwürdig ist, da counter ja an sich deine Zählervariable darstellt.

    for(int counter=0;counter=hmajup-1;counter++)
        {
            tagedesjahresbisher+=feld[counter];    
        }
    


  • OneNoob2Another schrieb:

    Hi,

    die Abbruchbedingung in der Schleife ist ja auch Quark! Da machst du ja auch eine Zuweisung und wenn "hmajup-1" nicht zufällig 0 ergibt, wird die Bedingung auch immer wahr sein. Die Variable "hmajup" ändert sich nie in der Schleife, so dass du counter immer den gleichen Wert zuweist, was auch schon fragwürdig ist, da counter ja an sich deine Zählervariable darstellt.

    for(int counter=0;counter=hmajup-1;counter++)
        {
            tagedesjahresbisher+=feld[counter];    
        }
    

    teile mir dann doch bitte eine bessere mit 😃



  • counter < 12



  • Braunstein schrieb:

    counter < 12

    es lebt! VIELEN DANK!!!! 😃 😮

    for(int counter=0;counter < 12;counter++)
    	{
    		if(hmajup>=counter)
    		{
    		tagedesjahresbisher+=feld[counter];
    		}
    	}
    

Log in to reply