Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C++ Dummer Anfängerfehler

Empfohlene Antworten

Veröffentlicht

Guten Abend,

ich bin zurzeit dabei mir das C++ - Buch von A-Z durchzulesen und wollte bei Seite 200 erstmal n kleines Programm schreiben, damit ich grade die Spielerei mit Arrays, die an Funktionen übergeben werden mal gemacht habe. Ich bin eher die Fehlermeldungen im gcc gewohnt und weiß jetzt leider nicht was der g++ mir mitteilen möchte. Sicher sind es ganz dummer Fehler und ich möchte mich schonmal im voraus dafür entschuldigen, aber vielleicht hat einer von euch Lust mal drüberzuschaun, ist natürlich erst Arbeit von ein paar Minuten, mir kommt es auch viel mehr auf die Fehlermeldungen des Compilers an:


#include <iostream>
#include <cstring>

using namespace std;

struct g_array{char array[7][8];

void print_field(g_array field);
struct g_array init(g_array field);

void print_field( g_array field )
{
for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
cout << " | " << field.array[i][j];
}
cout << " | " << endl;
cout << " ----------------------" << endl;
}
}

struct g_array init(g_array field)
{
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
field.array[i][j] = 0;
}
}
cout << "Initialisierung des Spielfeldes abgeschlossen:\n";
print_field( field );

return field;

struct g_array insert(g_array field, char stone[1], int line)
{
if(field.array[line][7] < 6)
{
/* Stein von oben reinwerfen, wenn noch nicht voll */
field.array[ line ][ 6 - field.array[line][7] ] = stone[0];
/* Menge der Steine in der Reihe hochzählen */
field.array[line][7]++;
}
else
{
cout << "Reihe " << line << " ist schon voll!" << endl;
cout << "Bitte wählen Sie eine andere Reihe...\n";
}

return field;
}

int main()
{
char *spieler_x, *spieler_o, puffer[24];
char stone_x[1],stone_o[1];
g_array field;
field = init(field);

cout << "Herzlich willkommen bei Vier gewinnt!\n";
cout << "Bitte geben Sie den Name für den Spieler mit den Stein x ein: ";
if( !( cin.getline(spieler_x,24) ) )
{
cerr << "Fehler bei der Eingabe!";
return(0);
}

cout << "Bitte geben Sie den Name für den Spieler mit den Stein o ein: ";
if( !( cin.getline(spieler_o,24) ) )
{
cerr << "Fehler bei der Eingabe!";
return 0;
}

return 0;
}

[/PHP]

Das hier meldet der g++:

[PHP]
viergewinnt.cpp:11:6: error: ‘void g_array::print_field(g_array)’ cannot be overloaded
viergewinnt.cpp:8:6: error: with ‘void g_array::print_field(g_array)’
viergewinnt.cpp:24:16: error: ‘g_array g_array::init(g_array)’ cannot be overloaded
viergewinnt.cpp:9:16: error: with ‘g_array g_array::init(g_array)’
viergewinnt.cpp:79:1: error: expected ‘}’ at end of input
viergewinnt.cpp: In member function ‘int g_array::main()’:
viergewinnt.cpp: At global scope:
viergewinnt.cpp:79:1: error: expected unqualified-id at end of input

Am wenigsten verstehe ich die letzte Meldung, kann mich jemand aufklären was der von mir will?

Gruß

  • Autor

Ohman, dann war der Titel ja schon richtig gewählt^^ ist mir wohl beim Kopieren an eine andere Stelle passiert.

Schon sind alle Fehler weg, ich danke dir ! :-)

Bearbeitet von Kadaj

ich bin zurzeit dabei mir das C++ - Buch von A-Z durchzulesen
Ich hab schon einiges von diesem Buch gehört, und wenn ich solchen Code sehe, weiß ich auch warum.

Wenn du dir nicht einen ganz furchtbaren Stil angewöhnen willst, den du später nur schwer wieder los wirst, solltest du dir ein anderes Buch zulegen.

mal ne blöde Frage nebenbei:

warum nutzt du die /* */ Zeichen bei einzeiligen Kommentaren?

das is doch echt umständlich :D

  • Autor

Achwas? Ich hatte mir auch schon einen Teil des C von A bis Z - Buches durchgelesen. Was genau ist denn schon jetzt stilistisch schlecht an dem bischen code?

Ein anderes Buch? Soll mir nur Recht sein, nur welches?

Ich habe allerdings nicht den Eindruck, dass ich mir dadurch überhaupt einen Stil angewöhne, ich lese mir nur durch wie was funktioniert und schreibe die Programme dann ohne mir das Buch zur Hilfe zu nehmen, meist nehm ich die man-Pages.

mal ne blöde Frage nebenbei:

warum nutzt du die /* */ Zeichen bei einzeiligen Kommentaren?

das is doch echt umständlich :D

Das habe ich mir in C angewöhnt. Ich musste im ersten Semester ein Programm als Beleg schreiben, welches portabel sein sollte. Daher habe ich immer mit gcc -Wall -pedantic kompiliert und der gcc hat mir alle // als Warnung angezeigt. Daher setz ich das jetzt immernoch so, ganz unbewusst... zählt das etwas auch schon zum schlechten Stil?^^

Gruß

Bearbeitet von Kadaj

Was genau ist denn schon jetzt stilistisch schlecht an dem bischen code?
Es ist nicht schlecht, es sieht aus wie C. C und C++ mögen verwandte Sprachen sein, aber die Art und Weise, wie man damit Probleme löst, ist komplett unterschiedlich. Darum halte ich es auch nicht für sinnvoll, zuerst C zu lernen, wenn man C++ lernen will.

Man kann in C++ Programme wie in C schreiben. Das heißt aber nicht, dass man das sollte.

Ein anderes Buch? Soll mir nur Recht sein, nur welches?
Der C++ Primer soll gut sein, so wie Thinking in C++.

Ich habe allerdings nicht den Eindruck, dass ich mir dadurch überhaupt einen Stil angewöhne, ich lese mir nur durch wie was funktioniert und schreibe die Programme dann ohne mir das Buch zur Hilfe zu nehmen, meist nehm ich die man-Pages.
Das ist bei C++ nicht besonders zielführend. Auch gute Tutorials im Internet sind leider rar gesät. Benutz ein gutes Buch.

Daher setz ich das jetzt immernoch so, ganz unbewusst... zählt das etwas auch schon zum schlechten Stil?^^
Nein, aber es ist ein weiteres Indiz für das angesprochene Problem ;)

Für den Anfang: Lass die Finger von char-Arrays, char-Zeigern und allem, was in <cstring> steht und benutz statt dessen std::string. Statt Arrays kannst du std::array (wenn dein Compiler das schon kann) oder std::tr1::array benutzen, oder notfalls std::vector.

  • Autor

Danke für die Tipps. Ich werd mir das Buch erstmal bis zu Ende durchlesen, weil ich schon 300 Seiten gelesen hab und die C++-Prüfung immer näher rückt, aber ich werde mir anschließend eines dieser Bücher zulegen um mir den schlechten Stil wieder abzuhewöhnen :-)

Danke für die Hilfe!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.