Kleine Fragen zur Programmiersprache C++ und dem Editor Visual C++

  • C++

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Kleine Fragen zur Programmiersprache C++ und dem Editor Visual C++

    Hallo Leute,
    ich möchte einige Grundlagen von C++ lernen. Angefangen habe ich auch schon. Nur leider kommen da immer wieder Probleme auf, die man nicht "eben so" lösen kann (wenn man so wie ich denkt :D).
    Erst einmal habe ich eine Frage zur Sprache C++ oder eher auch zum Editor Dev C++. In dem Editor kann man mit cout << "Hello World\n" einen Text in eine Konsole schreiben und man sorgt dann eben für eine neue Zeile. Wenn man sich aber jetzt die Deklaration "cout" anschaut und diese im Editor Visual C++ anwenden will, so kommt die Fehlermeldung, dass "cout" nicht deklariert ist. Bei Dev C++ schreibt man einfach #include <iostream.h> und bei VC++ nur #include <iostream>. Das sind denke ich mal Klassen, die z.B. "cout" deklarieren. Doch ich muss "cout" (natürlich kann ich auch alles andere nehmen) in VC++ deklarieren, um diesen Befehl anwenden zu können und leider weiß ich nicht recht, wie man so etwas deklariert. Kann mir da jemand helfen?

    Mfg
    Ich vermute mal,dass er cout nicht finden kann.Schreib so

    Quellcode

    1. std::cout<<"Irgendwas";

    Wenn du willst kanst du unter der Include zeile auch das schreiben.

    Quellcode

    1. using namespace std;

    Dann kannst du std weglassen.
    Hoffe das ist es was du suchst
    Ach ja was iostream.h angeht: C++ Header haben laut standart keine .h Dateiendung mehr. Somit ist es auch in DevC++(sofern das noch jemand verwendet) #include <iostream> erforderlich.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Häää, wer hat das Thema als erledigt markiert?
    Naja, egal. Ich habe da noch mal ein paar Probleme mit Windows-Forms-Anwendung. Ich erstelle ein "Leeres Projekt" und füge dann einfach eine Form hinzu, doch wenn ich dann in den Codedesigner gehe, kommen mir die ganzen Fehlermeldungen entgegen, diese lauten:
    IntelliSense: "namespace "System"" hat keinen Member ""Data"".
    IntelliSense: #error-Direktive: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    IntelliSense: #error-Direktive: MFC WinForms support requires MFC dll version.
    IntelliSense: Es wurde ein C++-Schlüsselwort erwartet.

    Was heiß daaaaas? :S
    Nenenenenenenenenene. Keine Forms in C++!
    Forms sind .NET. Wenn du .NET willst hast du kein reines C++. Also entscheid dich. Entweder Forms oder C++. Das Pseudoc++ kannste aber gleich vergessen, denn C++ mit Forms wird nix.
    Wenn du Forms willst nimm VB oder C#. Wenn du richtiges C++ willst gibts auch keine CLI sondern nur native C++.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Wenn du die Windows-Forms verwendest, dann schreibst gar nicht C++, sondern sog. Managed-C++ (im Prinzip C# bzw. VB.Net, nur mit C++-Syntax und der Möglichkeit nativen C++-Code und Managed-Code zu mischen). Davon würde ich allerdings abraten, sondern stattdessen C# verwenden, oder eben C++ mit einem "nativen" Framework.

    Möchtest du also in nativen C++ eine GUI programmieren? Dann solltest du ein Framework wie wxWidgets (wird z. B. in mkvmerge und FileZilla verwendet) oder Qt (wird in KDE, Virtual Box, VLC, ... verwendet) verwenden. Von MFC würde ich eher abraten, da es glaube ich nicht in den express Versionen von VS enthalten ist und meines Wissens nach auch nur unter Windows verfügbar ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Infinity“ ()

    Infinity schrieb:

    Davon würde ich allerdings abraten, sondern stattdessen C# verwenden, oder eben C++ mit einem "nativen" Framework.
    Warum?
    Wir machen ein C#-Projekt mit einer CLI-DLL (managed C++) und in die ist eine Lib native C++ eingebunden.
    Sinn: Managed Schnittstelle nach CLI und von dort aus spezielle Algorithmen in native C++.
    Hintergrund: CLI kann dekompiliert werden. Native C++ als Member-Klasse in einem CLI-Projekt wird auch dekompiliert! Klingt blöd, is aber so.
    Eine Native C++-Lib in einem CLI-Projekt wird nicht dekompiliert. So sind diese Algorithmen geschützt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja das ist aber auch der einzige Grund wieso man Managed C++ verwenden möchte. Vorallem bei Interops, Comimporten usw. kannste das verwenden.
    Jedoch Anwendungen in Managed C++ schreiben ist absoluter Schwachsinn. Das haben auch schon so viele Leute in Blogs etc. behandelt. Eine sehr kurze Zusammenfassung mit nen paar Gründen wieso WinForms und C++ nix wird ist hier: c-plusplus.de/forum/263084

    Und unten haste nochmal ganz kurz zusammengefasst was es sehr gut trifft:
    Empfehlung für Anfänger: Wenn Ihr unbedingt graphische Oberflächen (RAD) machen wollt, dann nehmt lieber C# (gibt es auch als Express Edition).
    Wenn Ihr wirklich C/C++ lernen wollt, dann nehmt die Professional-Version mit der MFC oder eine freie GUI-Bibliothek wie wxWidgets, GTK oder QT.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Mal ehrlich C++ ist zichtausend mal interessanter als VB. Deswegen wag ich auch schon die ersten Schritte mit C++. Nur, was macht es, wenn man eine Programmiersprache hat, aber keine Form-Oberfläche erstellen kann? Oder muss das alles per Code?
    Nochmal zum sicherstellen:
    VB.Net = Klar, ist .Net
    C# = ???
    C++ = Kein .Net, wenn man keine Windows-Forms-Anwendung nutzt

    Was ist C#? Auch .Net?


    Noch eine Frage: Gibt es ein Basic-Programmier-Programm, welches ohne .Net läuft?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Michael K.“ ()

    Ja, C# ist auch .Net. Managed C++ kannst du auch ohne Form schreiben, das muss man nur irgendwo im Projekt umstellen.
    Das geht entweder alles per Code oder du kannst Qt benutzen, die bieten eine Oberfläche für RAD an. Und du missverstehst C++ offensichtlich, C++ ist eine Sprache in der man für nichts bezahlt (in Form von CPU Zeit, RAM und Dateigröße) was man nicht nutzt, deshalb gibts auch keine integrierte Oberfläche (die müsste dann ja zusätzlich auch bei jedem Compiler genau gleich implementiert sein), Polymorphie nur mit virtual, Speicherplatz den man allokiert muss man auch selbst wieder freigeben (obwohl sich das mit C++11 etwas geändert hat), etc.
    Noch eine Frage: Gibt es ein Basic-Programmier-Programm, welches ohne .Net läuft?

    Ja es gibt auch Basic sprachen die kein .Net nutzen.
    z.B. mein Favorit die Open Source Sprache Free Basic
    Pure Basic
    Power Basic
    musste einfach en wenig nach googlen.
    @Nur, was macht es, wenn man eine Programmiersprache hat, aber keine Form-Oberfläche erstellen kann? Oder muss das alles per Code?Können schon. Jedoch ist dies nicht in den Standartlibs vorhanden. Bis vor kurzem waren nicht einmal Threads vorhanden und diese würde ich dann doch als viel viel wichtiger Einstufen als Oberflächen.
    Aber Forms sind nunmal .NET. Genauso wie WPF,... Native C++ ist aber nicht von einer Platform abhängig geschweige denn von .NET. Wenn du wirklich Oberflächen brauchst dann wirst du dich wohl mit anderen Bibliotheken auseinander setzen müssen. Einige hat man dir eh schon genannt. Mein Favorit ist Qt. Da hat jedoch jeder seine eigenen Vorlieben. Genaueres kannst du auch hier nachlesen: http://www.c-plusplus.de/forum/81596-full. Aber allgemein kann ich dir sagen, dass du als .NET Programmierer im Bezug auf Framework doch sehr verwöhnt bist/wirst. In C++ ist bei weitem nicht so viel und vor allem nicht so komfortabel wie in .NET vorhanden. Dafür gibt es jedoch wieder unzählige Bibliotheken,... die du verwenden musst/kannst.

    Ach ja: Wenn du wirklich C++ lernen möchtest, dann würde ich an deiner Stelle erstmal Grundlagen durchlesen. Dies sollte man auch in VB nur dort kannst du es auch ohne durchlesen schaffen die Grundlagen zu lernen. In C++ wird dies meiner Meinung nach nochmal ne Stufe schwieriger.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thefiloe“ ()

    Können schon. Jedoch ist dies nicht in den Standartlibs vorhanden. Bis vor kurzem waren nicht einmal Threads vorhanden

    Wtf? windows.h ist für Windows ja ganz sicherlich als Standard anzusehen und Threads sowie GUI sind da seit ewigkeiten drinnen, sicherlich lange bevor es das .Net überhaupt gab...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    de.wikipedia.org/wiki/C%2B%2B-Standardbibliothek. Das meine ich mit Standardlibs.
    Außerdem reden wir hier nicht von Windows, Linux oder sonst was sondern von C++ was an sich nur bedingt etwas mit API eines Betriebssystems zu tun hat.
    Und spätestens bei dem Satz wo ich die Threads erwähne, welche es seit neustem gibt(C++11 - neu? naja nicht mehr wirklich) sollte dies klar sein.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ok, dann erzähl ich dir folgendes.: C# oder VB.Net oder egal welche .Net Sprache beinhalten ebenfalls weder Threads noch WinForms, das sind schließlich auch erst die Libraries, die dann die API Wrapen...
    Also steht es gar nicht zur Debatte, dass dies in irwelchen Standardlibs ist, oder auch nicht. Mir war klar, dass du eben diese Libs gemeint hast, aber eben jene anderen Libs, sind auf dem jeweiligen Betriebssystem, wenn man sich den Kompiler holt, eben auch gleich dabei und somit Standard genug.
    Oder was wolltest du dem TE dadurch deutlich machen, wenn das nicht "in C++" ist(so wie in keiner anderen mir bekannten Sprache)...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Aber hier:
    Spoiler anzeigen

    C-Quellcode

    1. //In Microsoft Visual C++ generiertes Ressourcenskript.
    2. //
    3. #include "resource.h"
    4. #define APSTUDIO_READONLY_SYMBOLS
    5. /////////////////////////////////////////////////////////////////////////////
    6. //
    7. // Von der Ressource TEXTINCLUDE 2 generiert.
    8. //
    9. #ifndef APSTUDIO_INVOKED
    10. #include "targetver.h"
    11. #endif
    12. #define APSTUDIO_HIDDEN_SYMBOLS
    13. #include "windows.h"
    14. #undef APSTUDIO_HIDDEN_SYMBOLS
    15. /////////////////////////////////////////////////////////////////////////////
    16. #undef APSTUDIO_READONLY_SYMBOLS
    17. #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
    18. LANGUAGE 7, 1
    19. /////////////////////////////////////////////////////////////////////////////
    20. //
    21. // Symbol
    22. //
    23. // Das Symbol mit dem niedrigsten ID-Wert wird an erster Stelle platziert, um sicherzustellen,
    24. // dass es auf allen Systemen einheitlich ist.
    25. IDI_WIN32PROJECT1 ICON "Win32Project1.ico"
    26. IDI_SMALL ICON "small.ico"
    27. /////////////////////////////////////////////////////////////////////////////
    28. //
    29. // Menü
    30. //
    31. IDC_WIN32PROJECT1 MENU
    32. BEGIN
    33. POPUP "&Datei"
    34. BEGIN
    35. MENUITEM "&Beenden", IDM_EXIT
    36. END
    37. POPUP "&Hilfe"
    38. BEGIN
    39. MENUITEM "&Info...", IDM_ABOUT
    40. END
    41. END
    42. /////////////////////////////////////////////////////////////////////////////
    43. //
    44. // Zugriffstaste
    45. //
    46. IDC_WIN32PROJECT1 ACCELERATORS
    47. BEGIN
    48. "?", IDM_ABOUT, ASCII, ALT
    49. "/", IDM_ABOUT, ASCII, ALT
    50. END
    51. /////////////////////////////////////////////////////////////////////////////
    52. //
    53. // Dialogfeld
    54. //
    55. IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
    56. STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
    57. CAPTION "Info über Win32Project1"
    58. FONT 8, "MS Shell Dlg"
    59. BEGIN
    60. ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20
    61. LTEXT "Win32Project1, Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
    62. LTEXT "Copyright (C) 2013",IDC_STATIC,42,26,114,8
    63. DEFPUSHBUTTON "OK",IDOK,113,41,50,14,WS_GROUP
    64. END
    65. /////////////////////////////////////////////////////////////////////////////
    66. //
    67. // DESIGNINFO
    68. //
    69. #ifdef APSTUDIO_INVOKED
    70. GUIDELINES DESIGNINFO
    71. BEGIN
    72. IDD_ABOUTBOX, DIALOG
    73. BEGIN
    74. LEFTMARGIN, 7
    75. RIGHTMARGIN, 163
    76. TOPMARGIN, 7
    77. BOTTOMMARGIN, 55
    78. END
    79. END
    80. #endif // APSTUDIO_INVOKED
    81. #ifdef APSTUDIO_INVOKED
    82. /////////////////////////////////////////////////////////////////////////////
    83. //
    84. // TEXTINCLUDE
    85. //
    86. 1 TEXTINCLUDE
    87. BEGIN
    88. "resource.h\0"
    89. END
    90. 2 TEXTINCLUDE
    91. BEGIN
    92. "#ifndef APSTUDIO_INVOKED\r\n"
    93. "#include ""targetver.h""\r\n"
    94. "#endif\r\n"
    95. "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
    96. "#include ""windows.h""\r\n"
    97. "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
    98. "\0"
    99. END
    100. 3 TEXTINCLUDE
    101. BEGIN
    102. "\r\n"
    103. "\0"
    104. END
    105. #endif // APSTUDIO_INVOKED
    106. /////////////////////////////////////////////////////////////////////////////
    107. //
    108. // Zeichenfolgentabelle
    109. //
    110. STRINGTABLE
    111. BEGIN
    112. IDC_WIN32PROJECT1 "WIN32PROJECT1"
    113. IDS_APP_TITLE "Win32Project1"
    114. END
    115. #endif
    116. /////////////////////////////////////////////////////////////////////////////
    117. #ifndef APSTUDIO_INVOKED
    118. /////////////////////////////////////////////////////////////////////////////
    119. //
    120. // Von der Ressource TEXTINCLUDE 3 generiert.
    121. //
    122. /////////////////////////////////////////////////////////////////////////////
    123. #endif // nicht APSTUDIO_INVOKED


    wird doch auch eine Form erstellt. Wie erstellt man hier denn Buttons?

    jvbsl schrieb:

    das sind schließlich auch erst die Libraries, die dann die API Wrapen...
    Klick


    C# ist nicht wirklich Platformunabhängig und somit ist es scheiß egal welche API dahinter steckt, da du das Zeug so oder so nur auf Windows laufen lässt und dort garantiert die nötigen Bibliotheken für Threads, etc. vorhanden sind.
    Wenn du C++ programmierst und über WinAPI Threads erstellst, wünsche ich dir viel Spaß beim compilieren für ein Linuxsystem. Mehr habe ich nicht gesagt. Ich bin zwar kein c++ experte und das habe ich nie behauptet. Jedoch gibt es eine Standartbibliothek und soweit ich weiß werde ich mir wenn ich eine einfache Liste verwende keine Sorge über das Betriebssystem machen. Und soweit ich dies verstanden habe sollte es sich mit den neu eingeführten Threads ebenfalls so verhalten. Auf welche API diese Standartbibliotheken im Hintergrund anschließend zugreifen interessiert ja niemanden.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Nun, das macht man natürlich alles für jedes Betriebssystem schön extra. Und man benutzt schön den Präprozessor um anschließend auf den unterschiedlichen Systemen unabhängig kompilieren zu können und für jedes Betriebssystem den entsprechenden Code zusammenzustellen. Natürlich ist das sehr aufwändig, weshalb bei größerem natürlich der Rückgriff auf ein Framework zu empfehlen ist.

    @thefiloe: Ich hatte dich da wohl nur falsch verstanden :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich habe da so ein fertig gestelltes Beispiel für ziemlich viele Dinge gefunden. Total blöd. Dass jemand sowas in Netz stellt ist ja super, aber dass da nicht mal erklärt wird, wie die Buttons, Labels usw. deklariert wurden, dann ist das schon ganz schön nervig.
    Könnte mir jemand erklären, wie ich einen Label (per WinAPI) erstelle und ausrichte?