bluescreen
Also ich hab angefangen meinem kleinem Bruder C++ beizubringen.
Er hat dann ne kleine Headerdatei geschrieben und ich des Hauptprogram (nur 30 Zeilen oder so). Aber er giebt mir gleich 7 Fehler aus und ich find sie nich. Das is mir jetz beinahe schon peinlich. Hier der Code:
MAIN:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
#include <iostream>
#include "ab.h"
#include <conio.h>
using namespace std;
int main()
{
int a;
int b;
int c;
cout << "Bitte geben sie zwei Zahlen an:" << endl;
cout << "\t - 1.Zahl: ";
cin >> a;
cout << "\t - 2.Zahl: ";
cin >> b;
c = abz(a,b);
cout << a << " minus " << b << " ergiebt: " << c << endl;
cout << "Taste druecken zum beenden...";
getch();
return 0;
}
|
|
Und die Header(ab.h):
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
int abz (int Zahl1,int Zahl2);
int abz (int Zahl1,int Zahl2)
{
int temp;
temp = Zahl1 - Zahl2;
return temp;
}
|
|
daHooligan
und wie siehts mit den fehlern aus??
bluescreen
lol...
die hat ich glat vergessen...
1>------ Erstellen gestartet: Projekt: Taschenrechner, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2065: 'a': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2078: Zu viele Initialisierungen
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(2) : error C2065: 'a': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(2) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(3) : error C2448: 'abziehen': Funktionsstil-Initialisierung scheint eine Funktionsdefinition zu sein
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\main.cpp(17) : error C3861: "abz": Bezeichner wurde nicht gefunden.
1>Das Buildprotokoll wurde unter "file://c:\Users\Nicolas\Documents\Visual Studio 2008\Projects\Taschenrechner\Taschenrechner\Debug\BuildLog.htm" gespeichert.
1>Taschenrechner - 7 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
bluescreen
kann keiner das Problem lösen? is mein Visual C++ verreckt?
Hanfling
Warum kommt da der Token "abziehen" in der Fehlermeldung? Der ist nirgens im Sourcecode. Ich vermute mal dein Bruder hat zwei Header Dateien erstellt in Verschiedenen Ordnern. Aber die aus dem falschen Ordner die ned mit #include "" eingebunden wird zum Projekt hinzugefügt.
Ansonsten:
Man implementiert maximal inline Funktionen oder Methoden in ner Klassendeklaration in einem Header, sonst wirste einen Linker Error kriegen, wenn du den Header von mehreren Dateien aus einbindest.
/edit:
Auf so ein Problem deutet auch der Doppelte Ordner im Pfad.
Chris Hunter
ich bin zwar aus der übung aber machma "build all" mir scheint da wird nur halb kompiliert und der hat noch alte sachen vorkompiliert oder sowas.. jedenfalls echt schräg der passus "abziehen" zumal der niergends im source auftaucht... check ur files...
bluescreen
lol
das mit abziehen tut mir leid. da hät ich besser hinschaun solln. Ich hatte die funktion nämlich in abz() umbenannt und VC++ muss des ned gecheckt ham. Aber was ihr mir geraten habt hat ned gefunzt. Weder als inline funktion noch wenn ich die Funktions definition und deklaration ins main.cpp kopiere. hier noch mal die "richtige Fehlermeldung":
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
1>------ Erstellen gestartet: Projekt: Taschenrechner, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2065: 'a': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2433: 'abz': 'inline' bei der Deklaration von Daten nicht zulässig
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(1) : error C2078: Zu viele Initialisierungen
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(2) : error C2065: 'a': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(2) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\ab.h(3) : error C2448: 'abz': Funktionsstil-Initialisierung scheint eine Funktionsdefinition zu sein
1>c:\users\nicolas\documents\visual studio 2008\projects\taschenrechner\taschenrechner\main.cpp(17) : error C2064: Ausdruck ergibt keine Funktion, die 2 Argumente übernimmt
1>Das Buildprotokoll wurde unter "file://c:\Users\Nicolas\Documents\Visual Studio 2008\Projects\Taschenrechner\Taschenrechner\Debug\BuildLog.htm" gespeichert.
1>Taschenrechner - 8 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
|
|
das hauptprogramm(main.cpp):
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
#include <iostream>
#include <conio.h>
#include "ab.h"
using namespace std;
int main()
{
int a;
int b;
int c;
cout << "Bitte geben sie zwei Zahlen an:" << endl;
cout << "\t - 1.Zahl: ";
cin >> a;
cout << "\t - 2.Zahl: ";
cin >> b;
c = abz(a,b);
cout << a << " minus " << b << " ergiebt: " << c << endl;
cout << "Taste druecken zum beenden...";
getch();
return 0;
}
|
|
und die Header(ab.h):
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
inline int abz(a,b);
inline int abz(a,b)
{
int temp;
temp = a - b;
return temp;
}
|
|
Hanfling
| code: |
1:
|
inline int abz(a,b); |
|
Da sollte wohl das inline weg. Abgesehen davon, macht es keine Sinn die Deklaration der Funktion hinzuschreiben und direkt da drunter deren Implementation.
Und ansonsten würde ich eh die Finger vom inline Keyword lassen. Der Compiler muss es nicht befolgen, inline behindert das Debuggen und außerdem macht es im Zweifelsfall eh der Compiler automatisch, wo es Sinn macht.
Abgsehen davon, gehört in die Parameterliste bei C/C++ auch noch der Typ des Parameters rein, also sowas wie
| code: |
1:
|
int abz(int a, int b) |
|
Ansonten, pack so oder so die Implementation in eine cpp Datei und nicht in einen Header.
Und wo wir gleich dabei sind, deine temp-variable macht ist auch überflüssig und behindert im Zweifelsfall nur bei der Optimierung. Kannst auch direkt a-b zurückgeben.
bluescreen
also das mit inline wurde mir weiter oben im forum geraten.
Das mit den Typen hät ich sehen müssen.
Naja, und das mit dem temp... ich wollt mein Bruder nich zu stark verwirren.
Hanfling
Wenn du genau liest, siehst du das ich dir ned zu dem inline geraten hab.
bluescreen
1. stimmt wenn ich genau gelesen hätte hätte ich das bemerkt ;-)
2. danke für den Tipp. Ich check nich wie ich des übersehen konnte. naja, geschlossen!!!
*freu
Chris Hunter
your wish is my command. master!