Forum: PC-Programmierung C++ Eclipse Probleme mit cout und cin


von 12V DC (Gast)


Lesenswert?

Guten Tag
Ich habe folgendes Problem: Mein EclipseCDT(Kepler, Ubuntu 13.10 32Bit, 
Latitude D610) zeigt mir jedes Mal einen Fehler an, wenn ich versuche 
std::cout zu benutzen(dasselbe bei std::cin). Das Problem dabei liegt, 
dass ich soweit Anzeige iostream korrekt eingebunden habe, und er 
trotzdem meckert. Wenn ich jetzt aus anderen Codes kopiere geht es aber 
ab und zu.
Hier mal der Teil des Codes:
1
#include <iostream>
2
3
void areaofadisk(double r);
4
void capacity(double r, double h);
5
6
int main(){
7
  double radius{0.0}, high{0.0};
8
  std::cout << "Radius: \n";     //von Hier
9
  std::cin >> radius;
10
  std::cout << "Höhe: \n";
11
  std::cin >> high;              //bis Hier
12
  areaofadisk(radius);
13
  capacity(radius, high);
14
}

Die Fehermeldung ist übrigens: Symbol 'cout' could not be resolved

von Mark B. (markbrandis)


Lesenswert?

Dein Code-Beispiel enthält zwar Fehler (wie z.B. fehlender Return-Wert 
für main(), die Implementierung von areaofadisk()
und capacity() fehlt um es vollständig übersetzen zu können), aber nicht 
bei der Verwendung von cout.

Probiert mal das hier:

1
#include <iostream>
2
3
int main()
4
{
5
    std::cout << "Test" << std::endl;
6
    return 0;
7
}

Wenn das nicht funktioniert, dann liegt es nicht am Code, sondern an 
Deiner Installation.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Das ist eine Fehlermeldung von CDT selber, da fehlt vermutlich eine 
Angabe für den Indexer. Kompilieren sollte es aber trotzdem...

von Dr. Sommer (Gast)


Lesenswert?

Mark Brandis schrieb:
> (wie z.B. fehlender Return-Wert
> für main()
Das ist kein Fehler. Wenn die main() kein explizites "return" enthält, 
ist der Exit-Code per C++ Standard einfach 0.

von 12V DC (Gast)


Lesenswert?

Dasselbe Problem, Der Compiler gibt " Nicht definierter Verweis auf 
'main'" Aus. Die Meldung Oben ist die Schnellerklärung von Elcipse.

PS: Wo sin die anderen Fehler?

von Mark B. (markbrandis)


Lesenswert?

Dr. Sommer schrieb:
> Das ist kein Fehler. Wenn die main() kein explizites "return" enthält,
> ist der Exit-Code per C++ Standard einfach 0.

Meinetwegen halt kein Fehler, sondern schlampig programmiert. ;-)

von Rolf Magnus (Gast)


Lesenswert?

Versehentlich als C gelinkt?

von Mark B. (markbrandis)


Lesenswert?

12V DC schrieb:
> Dasselbe Problem, Der Compiler gibt " Nicht definierter Verweis auf
> 'main'" Aus. Die Meldung Oben ist die Schnellerklärung von Elcipse.

Dann ist der Fehler, dass Du hier kein vollständiges Minimalbeispiel 
vorstellst, mitsamt der richtigen Fehlermelduing.

Eine einzige Datei, also z.B. main.cpp (und nicht etwa main.c), mit dem 
minimalen Quelltext wird ja wohl kaum diesen Fehler aufweisen.

: Bearbeitet durch User
von Rolf Magnus (Gast)


Lesenswert?

12V DC schrieb:
> double radius{0.0}, high{0.0};

Ist sowas in aktuellen C++-Dialekten etwa korrekt? Ich hab das noch nie 
gesehen.

von 12V DC (Gast)


Lesenswert?

Rolf Magnus schrieb:
> 12V DC schrieb:
>> double radius{0.0}, high{0.0};
>
> Ist sowas in aktuellen C++-Dialekten etwa korrekt? Ich hab das noch nie
> gesehen.

Ja isses, das ist C++11 Standart.

Mark Brandis schrieb:
> Eine einzige Datei, also z.B. main.cpp (und nicht etwa main.c), mit dem
> minimalen Quelltext wird ja wohl kaum diesen Fehler aufweisen.

Ich habe den Quellcode von Mark ausprobiert und hatte das gleiche 
Problem.

von Dr. Sommer (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Ist sowas in aktuellen C++-Dialekten etwa korrekt? Ich hab das noch nie
> gesehen.

Das ist C++11. Damit der Indexer mit C++11 klarkommt, muss man in den 
Einstellungen -std=c++11 eingeben.

Mark Brandis schrieb:
> Meinetwegen halt kein Fehler, sondern schlampig programmiert. ;-)
Wieso ist das schlampig? 90% der Programme brauchen eh keinen Exit Code, 
und für die ist es daher wunderbar einfach gar kein return zu haben.

von Mark B. (markbrandis)


Lesenswert?

Dr. Sommer schrieb:
> Wieso ist das schlampig? 90% der Programme brauchen eh keinen Exit Code,

Die einzigen Programme, die keinen Exit Code brauchen, sind solche die 
auf einem kleinen Mikrocontroller ohne Betrübssystem in einer 
Endlosschleife im Kreis laufen :-)

von Mark B. (markbrandis)


Lesenswert?

12V DC schrieb:
> Ich habe den Quellcode von Mark ausprobiert und hatte das gleiche
> Problem.

Dann dürfte es wohl an einer fehlerhaften Projekteinstellung liegen.

von 12V DC (Gast)


Lesenswert?

Aber warum gibt er dann machmal auch keine Fehlermeldungen aus?

von 12V DC (Gast)


Lesenswert?

Jetz geht es plötzlich ich habe NICHTS gemacht. Aber bei einer neuen 
Datei habe ich das Problem sicher wieder...
Ist das die Zeit, die benötigt, um zu impaortiern??

von Dr. Sommer (Gast)


Lesenswert?

Mark Brandis schrieb:
> Die einzigen Programme, die keinen Exit Code brauchen, sind solche die
> auf einem kleinen Mikrocontroller ohne Betrübssystem in einer
> Endlosschleife im Kreis laufen :-)
Naja, bei GUI-Programmen wie Textverarbeitung etc. fragt keiner nach dem 
exitcode.

von Rolf Magnus (Gast)


Lesenswert?

12V DC schrieb:
> Rolf Magnus schrieb:
>> 12V DC schrieb:
>>> double radius{0.0}, high{0.0};
>>
>> Ist sowas in aktuellen C++-Dialekten etwa korrekt? Ich hab das noch nie
>> gesehen.
>
> Ja isses, das ist C++11 Standart.

Ich bin erstaunt. Hat das irgendeinen Vorteil gegenüber den üblichen 
Schreibweisen
1
double radius(0.0), high(0.0);
und
1
double radius = 0.0, high = 0.0;
?

Dr. Sommer schrieb:
> Wieso ist das schlampig? 90% der Programme brauchen eh keinen Exit Code,
> und für die ist es daher wunderbar einfach gar kein return zu haben.

Ich find's ziemlich unsinnig, in der Sprachdefinition extra eine 
Ausnahme für main() zu machen, daß dort (und nur dort) das return 
weggelassen werden kann. C++ ist komplex genug, da muß man nicht noch 
vollkommen unnötige Ausnahmen definieren.

Dr. Sommer schrieb:
> Naja, bei GUI-Programmen wie Textverarbeitung etc. fragt keiner nach dem
> exitcode.

Ja, der Aufwand für die Programmierung einer Textverarbeitung steigt 
enorm, wenn man dort in main() ein return 0 schreiben muß. ;-)

von Dr. Sommer (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Ich bin erstaunt. Hat das irgendeinen Vorteil gegenüber den üblichen
> Schreibweisendouble radius(0.0), high(0.0);
> unddouble radius = 0.0, high = 0.0;
> ?
In dem Fall nicht, nein. Aber das ist Teil der neuen vereinheitlichten 
initialization syntax, die dann Dinge erlaubt wie:
1
struct X { public: X (int, double, std::string); };
2
3
int main () {
4
  std::vector<X> v { {1, 3.14, "pi"}, {2, 2.7, "e"}, {3, 0, "Null"}};
5
}
Da guckt das tolle Java oder C dann übrigens blöd...
> Ich find's ziemlich unsinnig, in der Sprachdefinition extra eine
> Ausnahme für main() zu machen, daß dort (und nur dort) das return
> weggelassen werden kann.
Naja, exit codes sind ein wie gesagt oft nicht genutztes, also 
Optionales Feature; warum also jeden Programmierer zwingen einen 
anzugeben auch wenn man ihn nicht braucht...
> C++ ist komplex genug, da muß man nicht noch
> vollkommen unnötige Ausnahmen definieren.
Oder es spielt dann auch keine Rolle mehr ... :D Die main() ist so oder 
so speziell, denn sie erfährt kein Name Mangling, Überladungen, ist 
automatisch Entry-Point des Programms.
> Ja, der Aufwand für die Programmierung einer Textverarbeitung steigt
> enorm, wenn man dort in main() ein return 0 schreiben muß. ;-)
Immerhin hat es schon Diskussions-Aufwand generiert :o) Kann mich 
jedenfalls gerade nicht erinnern, wann ich zum letzten Mal einen exit 
code benötigt habe, aber ich kann mich an eine Unzahl an main()-Routinen 
erinnern, die ich geschrieben habe, und in der ich mir das return 
gespart habe. Die argc,argv -Parameter sind ja auch optional. Ist doch 
schön wenn das Minimal-C++-Programm keine unnötigen, selten benutzten 
Dinge enthalten muss...

von Rolf Magnus (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Die main() ist so oder so speziell, denn sie erfährt kein Name Mangling,
> Überladungen, ist automatisch Entry-Point des Programms.

Das sind aber auch Dinge, die eher nötig sind als ein optionales return.

> Die argc,argv -Parameter sind ja auch optional. Ist doch
> schön wenn das Minimal-C++-Programm keine unnötigen, selten benutzten
> Dinge enthalten muss...

Gerade beim Minimal-Programm würde ich es aber immer mit angeben, denn 
sonst meint der Anfänger, der sich das anschaut, daß ein return immer 
optional ist, und man muß ihm extra wieder erklären, daß das nur für den 
Spezialfall main() gilt. Und damit ist dann eines der ersten Features 
von C++, die er lernt, ausgerechnet eins, das so ziemlich zu den 
unwichtigsten der ganzen Sprache gehört.

Dr. Sommer schrieb:
> Kann mich jedenfalls gerade nicht erinnern, wann ich zum letzten Mal
> einen exit code benötigt habe

Ich habe sie schon oft gebraucht. Auch bei GUI-Programmen, wenn auch 
dort nicht für das Programm selbst, aber für einen Code-Generator, der 
halt wie üblich über den Exit-Code dem make sagt, ob er erfolgreich war.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.