Debugging Problem

jaquline

Erfahrenes Mitglied
Hi!
Folgendes Problem. Ich soll einen Taschenrechner schreiben mit den Grund-Funktionen,
sowie Bruchberechnung und Flächenberechnung. Gesagt, Getan. Das Script steht und
Funktioniert auch. Nun wollte ich noch einen zusätzlichen Teil dazu Programmieren und
seitdem streikt mein Visual Studio 2005. :mad:
Er komipiliert mir das ganze Script. -> Kein Fehler... :)
Sobald ich das Programm debuggen will kommt er mit den Fehlern LNK2019 und LNK1120.
Ich hab dann auch in das Projekt-Verzeichniss geschaut, und musste zu meinem
Verwundern feststellen, das in dem Debuggin Verzeichniss, die *.exe fehlt. :(
Jemand ne ahnung? :rolleyes:

Danke fürs Nachdenken

vlfg Jaquline
 
Ach ja, hier der Quellcode:
Taschenrechner.cpp
Code:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include "Funktionen.h"

void main (void)
{
	struct Variablen Var;
	int i,Menu,Typ;
	i = 0;
	//Schleife, damit das das Programm wieder von vorne Startet
	//nachdem eine Funktion ausgeführt ist
	do
	{
		Typ = 0;
		//Menu
		printf("|---------------------------------------------|\n");
		printf("|                                             |\n");
		printf("|              Taschenrechner                 |\n");
		printf("|                                        V.1.1|\n");
		printf("|                                             |\n");
		printf("|Bitte waehlen sie eine Rechenoperation aus:  |\n");
		printf("|                                             |\n");
		printf("|(1) Addition                                 |\n");
		printf("|(2) Subtraktion                              |\n");
		printf("|(3) Multiplikation                           |\n");
		printf("|(4) Division                                 |\n");
		printf("|(5) Flaechenberechnung                       |\n");
		printf("|(6) Bruchberechnung                          |\n");
		printf("|(0) Programm beenden                         |\n");
		printf("|---------------------------------------------|\n");
		printf("-> ");
		//Einlesen der Menu-Variable
		scanf("%d", &Menu);
		//Aufrufen der Funktion durch If-Klauseln
		//Mit der Variable Typ, wird bei den Funktionen Eingabe festgeleget ob 2 oder mehr
		//Variablen eingelesen werden sollen
		switch(Menu)
		{
			case 0:
				printf("Bitte eine Taste zum Beenden druecken\n\n\n");
				i++;
				getch();
				break;
			case 1:	
				Einlesen(Var,Typ);
				Addition(Var);
				Typ = 1;
				Ausgabe(Var,Typ);
				break;
			case 2:
				Einlesen(Var,Typ);
				Subtraktion(Var);
				Typ = 1;
				Ausgabe(Var,Typ);
				break;
			case 3:
				Einlesen(Var,Typ);
				Multiplikation(Var);
				Typ = 1;
				Ausgabe(Var,Typ);
				break;
			case 4:
				Einlesen(Var,Typ);
				Division(Var);
				Typ = 1;
				Ausgabe(Var,Typ);
				break;
			case 5:
				Typ = 4;
				Einlesen(Var,Typ);
				Flaeche(Var,Typ);
				Typ = 1;
				Ausgabe(Var,Typ);
				break;
			case 6:
				Typ = 5;
				Einlesen(Var,Typ);
				Brueche(Var,Typ);
				Typ = 2;
				Ausgabe(Var,Typ);
				break;
			//deault-Anweisung, falls eine Fehleingabe gemacht wird
			default:
				printf("Sie haben eine Falsche Taste gedrueckt, bitte korrigieren sie ihre Eingabe.");
				getch();
				system("cls");
				break;
		}
	}while(i<1);
}

Der Funktionen.h
Code:
#ifndef _FUNKTIONEN_
#define _FUNKTIONEN_

struct Variablen
{
	double a;
	double b;
	double c;
	double d;
	double radius;
	double Ergebnis;
	double Ergebnis2;
};

void Addition(struct Variablen &Var);
void Subtraktion(struct Variablen &Var);
void Multiplikation(struct Variablen &Var);
void Division(struct Variablen &Var);
void Flaeche (struct Variablen &Var,int &Typ);
void Brueche(struct Variablen &Var,int &Typ);
void Einlesen(struct Variablen &Var,int &Typ);
void Ausgabe (struct Variablen &Var);
void Ausgabe (struct Variablen &Var,int &Typ);

#endif

und zu guter letzt die Funktionen.cpp
Code:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include "Funktionen.h"

void Addition(struct Variablen &Var)
{
	Var.Ergebnis = Var.a + Var.b;
}

void Subtraktion(struct Variablen &Var)
{
	Var.Ergebnis = Var.a - Var.b;
}

void Multiplikation(struct Variablen &Var)
{
	Var.Ergebnis = Var.a * Var.b;
}

void Division(struct Variablen &Var)
{
	Var.Ergebnis = Var.a / Var.b;
}
void Flaeche(struct Variablen &Var,int &Typ)
{
	//Flaechenberechnung Kreis
	if(Typ==1)
	{
		const double pi = 3.141592;
		Var.Ergebnis = pi * ( ( (Var.radius*2)*(Var.radius*2) ) /4);
	}
	//Flaechenberechnung Rechteck
	if(Typ==2)
	{
		Multiplikation(Var);	
	}
	//Flaechenberechnung Dreiecke
	if(Typ==3)
	{
		Var.Ergebnis = (Var.a * Var.b) / 2;
	}
}

void Brueche (struct Variablen &Var,int &Typ)
{
	switch(Typ)
	{
		case 1:
			//Addition
			Var.Ergebnis = (Var.a * Var.d) + (Var.b * Var.c);
			Var.Ergebnis2 = Var.b * Var.d;
			break;
		case 2:
			//Subtraktion
			Var.Ergebnis = (Var.a * Var.d) - (Var.c * Var.d);
			Var.Ergebnis2 = Var.b * Var.d;
			break;
		case 3:
			//Multiplikation
			Var.Ergebnis = Var.a * Var.c;
			Var.Ergebnis2 = Var.b * Var.d;
			break;
		case 4:
			//Division
			Var.Ergebnis = Var.a * Var.d;
			Var.Ergebnis2 = Var.b * Var.c;
			break;
		default:
			printf("Bitte wählen sie eine gültige Option aus.");
			break;
	}
}
void Einlesen (struct Variablen &Var,int &Typ)
{
	switch(Typ)
	{
		//Einlesen für Addition,Subtraktion,Multiplikation,Division
		case 0:
			system("cls");
			printf("|---------------------------------------------|\n");
			printf("|Bitte geben Sie Wert 1 ein:                  |\n");
			printf("->");
			scanf("%lf", &Var.a);
			printf("|Bitte geben Sie Wert 2 ein:                  |\n");
			printf("->");
			scanf("%lf", &Var.b);
			printf("|---------------------------------------------|\n");
			break;
		//Einlesen für Kreisflaeche
		case 1:
			system("cls");
			printf("|---------------------------------------------|\n");
			printf("|Bitte geben Sie den Radius ein:              |\n");
			printf("->");
			scanf("%lf", &Var.radius);
			printf("|---------------------------------------------|\n");		
			break;
		//Einlesen für Rechtecksflaeche
		case 2:
			system("cls");
			printf("|---------------------------------------------|\n");
			printf("|Bitte geben Sie die Laenge von A an:         |\n");
			printf("->");
			scanf("%lf", &Var.a);
			printf("|Bitte geben Sie die Laenge von B an:         |\n");
			printf("->");
			scanf("%lf", &Var.b);
			printf("|---------------------------------------------|\n");
			break;
		//Einlesen für Dreiecksflaeche
		case 3:
			system("cls");
			printf("|---------------------------------------------|\n");
			printf("|Bitte geben sie die Laenge der               |\n");
			printf("|Hypothenuse C an:                            |\n");
			printf("->");
			scanf("%lf", &Var.a);
			printf("|Bitte geben sie die Laenge der               |\n");
			printf("|der Hypothenusenhoehe C-h an:                |\n");
			printf("->");
			scanf("%lf", &Var.b);
			printf("|---------------------------------------------|\n");
			break;
		//Einlesen für Flaeche-Allgemein
		//------------------------------
		case 4:
			system("cls");
			//Auswahl welche Teil-Funktio mittels If-Verzweigung in der
			//Flaeche-Funktion benutzt werden soll Auswahl erfolgt über die Typ-Variable
			printf("|---------------------------------------------|\n");
			printf("|Welche Flaeche moechten Sie berechnen?       |\n");
			printf("|(1) Kreisflaeche                             |\n");
			printf("|(2) Rechtecksflaeche                         |\n");
			printf("|(3) Dreiecksflaeche                          |\n");
			printf("|->");
			//Einlesen der Typ Variable
			scanf("%d", &Typ);
			printf("|---------------------------------------------|\n");
			//Abfangen der Fehleingabe mit 0
			//Fehlerfall: falls 0 einegeben wird, würde anstatt der radius (Fall 1)
			//die eingabe von 2 Werten erfolgen
			switch(Typ)
			{
				case 1:
					Einlesen(Var,Typ);
					Flaeche(Var,Typ);
					Ausgabe(Var);
					break;
				case 2:
					Einlesen(Var,Typ);
					Flaeche(Var,Typ);
					Ausgabe(Var);
					break;
				case 3:
					Einlesen(Var,Typ);
					Flaeche(Var,Typ);
					Ausgabe(Var);
					break;
				default:
					printf("Ihre Eingabe war nicht korrekt, bitte waehlen Sie erneut aus.");
					getch();
					system("cls");
					break;
			}
			break;
		//Einlesen für Brueche
		case 5:
		printf("|---------------------------------------------|\n");
		printf("|Welche Bruchfunktionen moechten Sie          |\n");
		printf("|benutzen?                                    |\n");
		printf("|(1) Addition                                 |\n");
		printf("|(2) Subtraktion                              |\n");
		printf("|(3) Multiplikation                           |\n");
		printf("|(4) Division                                 |\n");
		printf("|---------------------------------------------|\n");
		printf("-> ");
		scanf("%d", &Typ);
		printf("|---------------------------------------------|\n");
		printf("|Bitte geben sie den ersten Bruch an:         |\n");
		printf("-> ");
		scanf("%lf", &Var.a);
		printf("|-----------\n");
		printf("-> ");
		scanf("%lf", &Var.b);
		printf("|Bitte geben sie den zweiten Bruch an:         |\n");
		printf("-> ");
		scanf("%lf", &Var.c);
		printf("|-----------\n");
		printf("-> ");
		scanf("%lf", &Var.d);
		printf("|---------------------------------------------|\n");
	}
}
void Ausgabe (struct Variablen &Var,int &Typ)
{
	switch(Typ)
	{
		case 1:
			printf("|---------------------------------------------|\n");
			printf("|Das Ergebnis lautet: %.3lf\n", Var.Ergebnis);
			printf("|Bitte eine Taste zum fortfahren druecken:    |\n");
			printf("|---------------------------------------------|\n");
			getch();
			system("cls");
			break;
		case 2:
			printf("|---------------------------------------------|\n");
			printf("|Das Ergebniss lautet:                        |\n");
			printf("|%.3lf	   \n",Var.Ergebnis);
			printf("|-------                                      |\n");
			printf("|%.3lf	   \n",Var.Ergebnis2);
			printf("|---------------------------------------------|\n");
			getch();
			system("cls");
			break;
	}
}
 
Hi.

Poste doch mal bitte die Fehlermeldungen ganz genau so wie sie da stehen. Wenn irgendwas beim Linken fehlschlägt, ist es übrigens normal, dass keine .exe erstellt wurde...

PS: Verwende doch bitte das nächste mal die Code Tags wenn du Quelltext postest. (/edit: Ups, ich sehe gerade du hast es sogar versucht... ;))

Gruß
 
jup hab ich ;)

Fehler Nr1.
Taschenrechner error LNK2019: Nicht aufgelöstes externes Symbol '"void __cdecl Ausgabe(struct Variablen &)" (?Ausgabe@@YAXAAUVariablen@@@Z)', verwiesen in Funktion '"void __cdecl Einlesen(struct Variablen &,int &)" (?Einlesen@@YAXAAUVariablen@@AAH@Z)'


Fehler Nr.2
Taschenrechner fatal error LNK1120: 1 unaufgelöste externe Verweise

brauchst du sonst noch was? hab echt keine ahnung was es sein könnte. hab auch nichts
umgestellt oder so...
 
Du hast zwei Ausgabe-Funktionen definiert, aber nur eine davon implementiert. Die Funktion void Ausgabe (struct Variablen &Var ) wird aufgerufen, existiert aber nicht.

Das will dir der Compiler mit der Meldung da sagen, nur leider etwas ungeschickt.
 
:eek: Achso, danke!
das hab ich total übersehen. Manchmal sieht man leider echt den Wald vor lauter Bäumen
nicht...

vlg Jaquline
 
Zurück