C++ problem

Joined
Mar 26, 2010
Messages
4,098
Points
0
ich hab ein kleines programm geschrieben DEV C++ zeigt mir fehler an aber ich weiß net was falsch ist kann sich das mal jemand anschauen
vielen dank
Mfg SgtMcPwnage

// Aykut Gür Programm Pin Abfrage
# include <iostream.h>


int Geheim=1234;


cout << "Enter Pin";
cin >> Geheim;

if ( Geheim == 1234 );

cout >> "Starting System";
Else
cout << "Wrong Pin";
cout << "Enter Pin";
cin >> Geheim;

if ( Geheim == 1234 );

cout >> "Starting System";
Else
cout << "Wrong Pin";
cout << "Enter Pin";
cin >> Geheim;

if ( Geheim == 1234 );

cout >> "Starting System";
Else
cout << "Wrong Pin";
cout << "Enter PUK";
Getcha
}
 
Last edited:
Hier gibt's ne Codefunktion mit der das Ganze schön strukturiert dargestellt wird. Was für ein Fehler angezeigt wird wäre auch nicht schlecht zu wissen. Noch nie was mit C++ gemacht, aber soweit ich weiß kommt nach einem if eine geschwungene Klammer. Wäre dann also:

Code:
// pincode.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
		int Geheim=1234;


cout << "Enter Pin";
cin >> Geheim;

if ( Geheim == 1234 )
{
cout << "Starting System";
}

else
{
cout << "Wrong Pin";
cout << "Enter Pin";
cin >> Geheim;
}

if ( Geheim == 1234 )
{
cout << "Starting System";
}

else
{
cout << "Wrong Pin";
cout << "Enter Pin";
cin >> Geheim;
}

if ( Geheim == 1234 )
{
cout << "Starting System";
}

else
{
cout << "Wrong Pin";
cout << "Enter PUK";
}
	return 0;
}

E: Hab's jetzt mal selbst versucht. Deine Fehler waren, dass du #include <iostream> nicht angegeben hast (Ist eine Klassenbibliothek die es dir ermöglich Befehle wie "cout" zu verwenden soweit ich weiß), den namespace vergessen hast, nach einem if oder einem else kommt eine geschwungene Klammer kein Strichpunkt (Strichpunkte beenden Befehle) und du hast bei cout falsche Pfeile gemacht. (Du hast teilweise cout >> geschrieben. Richtig ist cout <<) Programm funktioniert, das Formatieren damit es in der Console halbwegs aussieht überlass' ich mal dir.
 
Last edited:
Mit klammer wäre es so ....

// Aykut Gür Programm Pin Abfrage
# include <iostream.h>


int Geheim=1234;

{
cout << "Enter Pin";
cin >> Geheim;
}
if ( Geheim == 1234 );
{
cout >> "Starting System";
}
Else
{
cout << "Wrong Pin";
cout << "Enter Pin";
cin >> Geheim;
}
if ( Geheim == 1234 );
{
cout >> "Starting System";
}
Else
{
cout << "Wrong Pin";
cout << "Enter Pin";
cin >> Geheim;
}
if ( Geheim == 1234 );
{
cout >> "Starting System";
}
Else
{
cout << "Wrong Pin";
cout << "Enter PUK";
Getcha
}


aber klappt immernoch net
 
Hab's oben editiert. Klappt jetzt wunderbar. Habt ihr eigentlich schon Schleifen gemacht?
 
Last edited:
Code:
#include "stdafx.h"
#include <iostream>
using namespace std;

void _tmain(int argc, _TCHAR* argv[])
{	
	int Geheim=1234; 
	

cout << "Enter Pin";
cin >> Geheim;

if ( Geheim == 1234 )
{cout << "Starting System";}
else {
	cout << "Wrong Pin";
	cout << "Enter Pin";
	cin >> Geheim;}

if ( Geheim == 1234 ){
	cout << "Starting System";}
else {
	cout << "Wrong Pin";
	cout << "Enter Pin";
	cin >> Geheim;}

if ( Geheim == 1234 ){
	cout << "Starting System";}
else{ 
	cout << "Wrong Pin";
	cout << "Enter PUK"; 
	Getcha}
}

dito, #include <stdio> <- ohne .h, keine main methode, bei den ifs die {} vergessen, else muss ich kleinschreiben, 3-4 >> sollten << sein,
 
Bei mir klappt immernoch net :O
unbenanntjwq.jpg
 
Dass das Programm ein paar Unfeinheiten hat, was den Ablauf angeht lass ich mal außen vor, aber das kompilieren klappt so bei mir:
könnte mir vorstellen das du z.B. noch die header Datei für TCHAR einbinden müsstest etc., hab's aber jetzt mal auf Standarddatentypen reduziert - das argv Array nutzt du ja eh nicht.

Code:
#include "stdafx.h"
#include <iostream>
using namespace std;

void main(int argc, char* argv[]){	
	int Geheim=1234; 

	cout << "Enter Pin";
	cin >> Geheim;

	if ( Geheim == 1234 ){
		cout << "Starting System";
	} else {
		cout << "Wrong Pin";
		cout << "Enter Pin";
		cin >> Geheim;
	}
	if ( Geheim == 1234 ){
		cout << "Starting System";
	} else {
		cout << "Wrong Pin";
		cout << "Enter Pin";
		cin >> Geheim;
	}
	if ( Geheim == 1234 ){
		cout << "Starting System";
	} else { 
		cout << "Wrong Pin";
		cout << "Enter PUK"; 
	}
}
 
Wofür brauchst du "stdafx.h" ? Ich habe es mal entfernt.

Ich habe Geheim in pin umbenannt und die Ausgaben etwas zusammengefasst, bzw. zusätzliche Endlines hinzugefüg.

Des Weiteren habe ich aus "void main" "Int main" gemacht, um "EXIT_SUCCESS" zurückgeben zu können.
Und zu guter Letzt habe ich "using namespace std;" entfernt, da ich es zur Vermeidung von Fehlern besser finde explizit "std::" anzugeben.

C++:
#include <iostream>

int main()
{
    int pin; 
 
    std::cout << "Enter Pin:" << std::endl;
    std::cin >> pin;
 
    if (pin == 1234)
    {
        std::cout << "Starting System.";
    }
    else
    {
        std::cout << "Wrong Pin." << std::endl << "Enter Pin:" << std::endl;
        std::cin >> pin;
    }
	
    if (pin == 1234)
    {
        std::cout << "Starting System.";
    }
    else
    {
        std::cout << "Wrong Pin." << std::endl << "Enter Pin:" << std::endl;
        std::cin >> pin;
    }
	
    if (pin == 1234)
    {
        std::cout << "Starting System.";
    }
    else
    { 
        std::cout << "Wrong Pin." << std::endl << "Enter PUK:" << std::endl;
    }
	
    return EXIT_SUCCESS;
}
 
vielen dank so klappts aber ....Das is ja jetzt für die schule und ich sollte es eigentlich mit den mitteln machen die wir auch gelernt haben.....
könntest du mir erklären was das "std::" bedeutet dann hätte ich ne begründung
 
Am besten erkläre ich erstmal was ein Namensraum (engl. Namespace) ist und wozu er dient.
Ein Namensraum erweitert die Definition einer Funktion oder einer Variablen (innerhalb des jeweiligen Namensraum) und die Zugehörigkeit zum Namensraum.

Dies bedeutet faktisch, dass zwei Funktionen mit dem gleichen Namen existieren können, sofern sie zu unterschiedlichen Namensräumen gehören und somit Konflikte durch unterschiedliche Bibliotheken ausgeschlossen werden können, wenn beide eine Funktion mit dem gleichen Namen definieren. Da ein Entwickler nicht alle möglichen C++-Bibliotheken kennt und somit nicht alle möglichen schon verwendeten Namen von Funktionen etc. würde dies sonst sehr häufig zu Konflikten führen.

Der Namensraum der Standard-Bibliotheken von C++ hat den Namen std (Standard).

Einen Namensraum definiert man über:
C++:
namespace osbesNamespace
{
    double mul(float a, float b)
    {
        return a * b;
    }

    double add(float a, float b)
    {
        return a + b;
    }
}
Somit gibt es im Namensraum osbesNamespace die Funktionen mul und add.

Möchte man nun diesem Namensraum weitere Funktion in einer anderen Datei hinzufügen, so ändert sich an der schreibweise garnix.
C++:
namespace osbesNamespace
{
    double sub(float a, float b)
    {
        return a - b;
    }
}
Somit würde der Namensraum osbesNamespace nun die Funktionen mul, add und sub beinhalten.

Um diesen Namensraum nun zu nutzen schreibt man:
C++:
#include "Datei_wo_add_und_mul_definiert_ist.h"
#include "Datei_wo_sub_definiert_ist.h"

int main()
{
    osbesNamespace::add(1, 2);
    osbesNamespace::mul(1, 2);
    osbesNamespace::sub(1, 2);
}

Nun kann man sich natürlich vorstellen, dass es teilweise sehr lästig werden kann jedesmal "osbesNamespace::" zu schreiben, nur um etwas aus diesem Namensraum zu nutzen, gerade wenn man es ständig benötigt. Hier kommt using namespace ins Spiel.

Äquivalent wäre somit zu obigem Programm auch:
C++:
#include "Datei_wo_add_und_mul_definiert_ist.h"
#include "Datei_wo_sub_definiert_ist.h"

using namespace osbesNamespace;

int main()
{
    add(1, 2);
    mul(1, 2);
    sub(1, 2);
}
Der Nachteil ist jedoch, dass dadurch sowohl für andere Programmierer bei größeren Projekten nicht mehr geklärt ist welcher Namensraum nun wo gemeint ist und es zu unabsichtlichen Fehlern kommen kann, wenn man eigentlich einen anderen Namensraum nutzen wollte.

Ich hoffe dies klärt die Frage und würde dich sonst an Google (Stichwort: Namensraum C++) und Wikipedia (Ist oben verlinkt) verweisen.
 
Der Nachteil ist jedoch, dass dadurch sowohl für andere Programmierer bei größeren Projekten nicht mehr geklärt ist welcher Namensraum nun wo gemeint ist und es zu unabsichtlichen Fehlern kommen kann, wenn man eigentlich einen anderen Namensraum nutzen wollte.
Schöne Erklärung, sollten aber 2 Funktionen mit dem selbem Namen in unterschiedlichen Namensräumen existieren, so definiert sich deren Gebrauch über die übergebenen Parameter, bzw. dem vorrangestelltem Object.
Ist dir Klasse statisch und die Parameter identisch, müsste spätestens der Linker ne Fehlermeldung auschmeissen.
Da ich mich mit dem objektorientierten Gedösel aber nicht so gerne beschäftige bin ich da dann auch nicht zu 100% sicher, alles andere wäre aber Wahnsinn ;)
 
Back
Top Bottom