Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Hammerhead

unregistriert

1

17.02.2009, 22:01

Compilerproblem, oder Sourcecodefehler?

Hi Leute,
ich sitze gerade an einem Sourcecode aus einem Buch über C++.
ich bin mir ziemlich sicher, dass ich ihn korrekt abgeschrieben habe.
Hier der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//do_while1.cpp
#include <iostream>
using namespace std;

int main(void) {
	int var;
	do {
		cout << "-1- Europa\n";
		cout << "-2- Asian\n";
		cout << "-3- Afrika\n";
		cout << "-4- Amerika\n";
		cout << "-5- Ende\n";
		cout << "Ihre Wahl bitte: ";
		if ( !(cin >> var) ) {
			cerr << "Falsche eingabe - Keine Zahl\n";
			exit(1);
		}
		cout << "Ihre Wahl ist ";
		switch ( var ) {
			case 1:
				cout << "Europa\n";
				break;
			case 2:
				cout << "Asien\n";
				break;
			case 3:
				cout << "Afrika\n";
				break;
			case 4:
				cout << "Amerika\n";
				break;
			case 5:
				cout << "\nOk, das Programm wird beendet!\n";
				break;
			default:
				cout << "\nFehler bei der Auswahl !\n";
		}
	} while( var != 6 );
	return 0;
}

Wenn ich dann mit

Quellcode

1
g++ -Wall -o do_while1 do_while1.cpp

kompilieren will, gibt er folgendes aus:

Quellcode

1
2
do_while1.cpp: In function ‘int main()’:
do_while1.cpp:16: error: ‘exit’ was not declared in this scope

Programmversionen von Kdevelop und g++:

Quellcode

1
2
3
4
g++ (Ubuntu 4.3.2-1ubuntu12) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Quellcode

1
2
3
Qt: 3.3.8b
KDE: 3.5.10
KDevelop: 3.5.3


Wo liegt nun das Problem? Ich hatte schon einmal, dass unter Linux einige Sourcecodes nicht gingen, welche aber in "Dev C++" unter Win liefen. Nur ist das "Problem", dass ich lieber mit Kdevelop oder allgemein lieber mit Linux coden will:D

MfG
Hammerhead




EDIT:
Hier gleich das 2. Problem:

Quellcode

1
2
3
4
5
6
7
8
9
10
//for2.cpp
#include <iostream>
using namespace std;

int main(void) {
	for ( int n1=1, n2=2; n1 <= 10; n1++; n2*=2 ) {
		cout << (n1*n2) << '\n';
	}
	return 0;
}

Compilerausgabe:

Quellcode

1
2
3
4
5
6
for2.cpp: In function ‘int main()’:
for2.cpp:6: error: expected `)' before ‘;’ token
for2.cpp:6: warning: unused variable ‘n2’
for2.cpp:6: error: name lookup of ‘n2’ changed for new ISO ‘for’ scoping
for2.cpp:6: error:   using obsolete binding at ‘n2’
for2.cpp:6: error: expected `;' before ‘)’ token

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Hammerhead« (19.02.2009, 08:26)


chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

2

18.02.2009, 09:54

ich sitze gerade an einem Sourcecode aus einem Buch über C++.
Welches buch, bzw. von wem?

Zu deinem ersten problem, füg mal ganz oben folgendes ein, und versuch es nocheinmal!

Quellcode

1
#include <stdlib.h>


//EDIT:
Wegen der ausgabe:

Quellcode

1
cout << (n1*n2) << endl; 
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »chroot« (18.02.2009, 09:54)


Hammerhead

unregistriert

3

18.02.2009, 15:15

Ok, die von dir genannte Headerdatei einzufügen, hat funktioniert. Danke :)
Das Problem mit for2.cpp besteht immernoch.

Ich nutze im übrigen dieses sehr gut gelungene Buch. Ich kann es jedem empfehlen, der Programmieren wirklich bis in kleinste Detail verstehen will. Er erklärt einfach super, und trotzdem geht es zügig voran.

Edit:
Kannst mir nennen, was diese Headerdatei in diesem Fall bringt?
Laut Google hat sie ja was mit Zahlenumwandlung zu tun, und Speicherverwaltung, und teilweise wurde auch etwas von Strings erwähnt.
Aber die einzige Variable die ich habe, ist ja var und die muss ja nur ganzzahlige Zahlen beinhalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Hammerhead« (18.02.2009, 15:15)


chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

4

18.02.2009, 15:29

Edit:
Kannst mir nennen, was diese Headerdatei in diesem Fall bringt?
Laut Google hat sie ja was mit Zahlenumwandlung zu tun, und Speicherverwaltung, und teilweise wurde auch etwas von Strings erwähnt.
Aber die einzige Variable die ich habe, ist ja var und die muss ja nur ganzzahlige Zahlen beinhalten.
???

Hier findest du eine referenz zu den header files! In der stdlib.h befindet sich unter anderem das von dir benutzte "exit()"!

//EDIT: Für dein for2.cpp problem:

Deine version:

Quellcode

1
cout << (n1*n2) << '\n';


Neue version:

Quellcode

1
cout << (n1*n2) << "\n";


Noch bessere version (endl == end line):

Quellcode

1
cout << (n1*n2) << endl;


'\n' --> da versuchst du ein new line als char auszugeben!
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »chroot« (18.02.2009, 15:29)


Hammerhead

unregistriert

5

18.02.2009, 15:36

Ok, schonmal danke für den Link.
Leider geben alle 3 Version von Zeilenumbruch dieselbe Fehlermeldung aus.
Hat es irgendwas mit der Variable n2 zu tun? Der Compiler erwähnt sie ja recht oft.

chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

6

18.02.2009, 15:44

Habs gerade erst gesehen:

Quellcode

1
for ( int n1=1, n2=2; n1 <= 10; n1++; n2*=2 )


Das letzte semikolon muss ein beistrich sein!
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

Hammerhead

unregistriert

7

18.02.2009, 16:01

Ok, dass hat funktioniert, aber warum genau nun ein Komma?
Die Postinkrementierung n1 hat doch eigentlich nichts mit n2*=2 zu tun. Deswegen müsste man es doch durch ein ; trennen, weil's eine eigene Anweisung ist.
Verrate mir bitte, was du weißt, da ich noch Anfänger bin.

chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

8

18.02.2009, 16:08

Also folgendes:

Dieser schleifenkopf ist folgend gegliedert:

Quellcode

1
for ( int n1=1, n2=2; n1 <= 10; n1++, n2*=2 )


Schleife:

Quellcode

1
for( )


Variablendeklarationen und zuweisungen:

Quellcode

1
int n1=1, n2=2


Bedingungsüberprüfung

Quellcode

1
n1 <= 10


Variablenerhöhung

Quellcode

1
n1++, n2*=2 


Dazwischen sind immer semikolone.

Als beispiel (eine einfache schleife):

Quellcode

1
2
3
4
for ( int i = 0 ; i < 10 ; i++ )
{
//...
}


Diese schleife wird solange durchlaufen, solange "i" kleiner ist als 10, und bei jedem durchlauf wird "i" um eins erhöht.
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

Hammerhead

unregistriert

9

18.02.2009, 17:01

Hmm...
Also solange mehrere Variablenerhöhungen hintereinander stattfinden, egal welche, in welcher Art und wie oft, muss kein Semikolon?

chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

10

19.02.2009, 08:11

Nein, da muss ein beistrich dazwischen.

Das hier würde auch funktionieren:

Quellcode

1
for(int a=0, b=0, c=0, d=0;a<10, b<10, c<10, d<10;a++, b++, c++, d++)


Das ist aber sehr unschön, da würde ich z.b. mehrere schleifen verschachteln:

Quellcode

1
2
3
4
5
6
7
8
9
10
for(int a=0;a<10;a++)
{
	for(int b=0;b<10;b++)
	{
		for(int c=0;c<10;c++)
		{
			//...
		}
	}
}
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

Hammerhead

unregistriert

11

19.02.2009, 08:25

Ok, dann merke ich mir, wenn irgendwas nicht geht, mal nach der Headerfile gucken, und bei Variablenerhöhung jeder Art nur ein Komma und kein Semikolon.

Danke für deine Hilfe:)

chroot

Ubuntu-Forum-Team

  • »chroot« ist männlich

Beiträge: 2 321

Registrierungsdatum: 04.03.2008

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Fedora 27

  • Nachricht senden

12

19.02.2009, 08:40

wenn irgendwas nicht geht, mal nach der Headerfile gucken
Es liegt in den meisten fällen an den header files! ;)

Ist c++ dein erster programmierversuch oder "sprichst" du auch noch andere sprachen?
"Do or do not. There is no try." (Yoda) || Thread auf gelöst/erledigt setzen

  • »aardvark« ist männlich

Beiträge: 402

Registrierungsdatum: 04.09.2008

Derivat: Kubuntu

Version: Ubuntu 20.04 LTS - Focal Fossa

Architektur: 64-Bit PC

Desktop: KDE4

Andere Betriebssysteme: Debian 11.0

  • Nachricht senden

13

19.02.2009, 13:43

Ich hoffe, das ist nur ein Syntaxvergleich... ;)

Das hier würde auch funktionieren:

Quellcode

1
for(int a=0, b=0, c=0, d=0;a<10, b<10, c<10, d<10;a++, b++, c++, d++)


Das ist aber sehr unschön, da würde ich z.b. mehrere schleifen verschachteln:

Quellcode

1
2
3
4
5
6
7
8
9
10
for(int a=0;a<10;a++)
{
	for(int b=0;b<10;b++)
	{
		for(int c=0;c<10;c++)
		{
			//...
		}
	}
}

Dir ist schon klar, daß das zwei völlig unterschiedliche Konstrukte sind?
Die erste Variante hat 10 Durchläufe, die zweite 10^3 (bzw. 10^4 mit a, b, c, d).

Grüße, Peter

Hammerhead

unregistriert

14

19.02.2009, 13:47

Zitat

Ist c++ dein erster programmierversuch oder "sprichst" du auch noch andere sprachen?

Also von nennenswerten Kenntnissen anderer Sprachen kann man nicht sprechen.
Aber in der Schule fangen wir gerade mir Java an(Leider nicht C/C++).
C++ wollte ich aber sowieso beherrschen, daher bringe ich es mir gerade bei:)