C++ Syntax Problem mit Visual Studio und Benutzung einer Klasse

  • C++/CLI

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    C++ Syntax Problem mit Visual Studio und Benutzung einer Klasse

    Hallo Community,
    mein Problem ist folgendes: in Z.12 des Quellcodes kann ich "Neuron1" nicht deklarieren. Ich habe bereits verschiedene Optionen getestet, aber nichts davon scheint zu funktionierten.
    In Visual Studio(2017) entstehen einige Fehler. Ich hab mal im Anhang einen Screenshot eingebaut.

    Das Ganze Programm hat noch nicht einen wirklichen Sinn, ich hatte einfach nur die Idee dazu.
    Die Struktur von

    C-Quellcode

    1. class module {}
    ist so eine verwurstete Variante der Struktur eines Neurons

    Hat da jemand evtl. eine Idee woher der Fehler kommt?
    Hatte leider bisher mit C++ nicht all zu viel am Hut, habe immer nur C# und VB.NET genutzt. Kann daher auch nicht genau sagen woher der Fehler kommt.

    C-Quellcode

    1. // NN.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung.
    2. //
    3. #include "stdafx.h"
    4. #include <iostream>
    5. #include <stdlib.h>
    6. using namespace std;
    7. int main(int argc, char** argv)
    8. {
    9. module module1;
    10. module1.input[0] = 2.2;
    11. module1.sWeight[0] = 2.2;
    12. std::cout << "Module Output: " << module1.start() << std::endl;
    13. std::cin.ignore();
    14. return 0;
    15. }
    16. class module
    17. {
    18. private:
    19. const float iActTrigger = 5.0;
    20. float ModInput[10];
    21. public:
    22. float sWeight[10];
    23. float input[10];
    24. double output()
    25. {
    26. int min = 0;
    27. int max = 10;
    28. int aSize = sizeof(input) / sizeof(*input);
    29. for (int i = aSize; aSize<max; min = min + 1)
    30. {
    31. ModInput[min] = input[min] * sWeight[min];
    32. }
    33. return trigger();
    34. }
    35. double trigger()
    36. {
    37. int min = 0;
    38. int max = 10;
    39. int cmin = 0;
    40. int aSize = sizeof(input) / sizeof(*input);
    41. for (int i = aSize; aSize<max; min = min + 1)
    42. {
    43. for (int i = cmin; cmin<aSize; cmin = cmin + 1)
    44. {
    45. if (ModInput[min]>iActTrigger)
    46. {
    47. return ModInput[min];
    48. } else {
    49. return 0;
    50. }
    51. }
    52. }
    53. }
    54. double start()
    55. {
    56. return output();
    57. }
    58. };


    P.s.
    mir ist im Moment egal ob der Code in der jetzigen Form funktioniert, es geht mir nur um das hier genannte Problem. Der Code an sich hat noch schwächen, da mich aber das aktuelle Problem
    daran hindert, weiter zu arbeiten, muss erst mal das gelöst werden :)
    Bilder
    • vs_error1.PNG

      26 kB, 854×328, 154 mal angesehen
    Kann sein, dass meine Antwort falsch ist. Ist schon ewig her, dass ich mit C++ mal was gemacht hab. Aber da ich auch C kann, würde ich jetzt einfach mal behaupten, dass Du die Klasse davor deklarieren musst (davon abgesehen, dass das eh separat sein sollte), weil die main sie sonst da noch nicht kennt.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Das hatte ich auch schon als Fehler vermutet, aber sobald ich das ganze in eine 2. Datei Packe und definieren will, wird das ganze nicht mehr erkannt, daher auch 2 Klassen in einer Datei.

    @seh Hab ich bereits gemacht, funktioniert auch nicht

    MfG,
    Revenant
    selbst wenn der Code funktioniert kanns doch nie funktionieren?
    In Zeile 37:
    i wird nur deklariert und einmal zugewiesen ansonsten nie verwendet, kann man also ganz weglassen.
    aSize sollte 10 sein, max wird auch auf 10 festgesetzt
    aSize<max <-> 10 < 10 ist eindeutig false, die schleife kann also nie durchgegangen werden und wenn es true wäre, dann wäre es eine endlosschleife, weil weder aSize noch max jemals verändert werden...

    Zeile 50:
    dasselbe nur für zwei schleifen?!

    Und wie die anderen bereits gesagt haben, in eine Headerdatei packen und das inkludieren nicht vergessen, dann dürfte es keine Probleme geben.

    P.S.: du hast hoffentlich nicht wirklich C++/CLI verwendet um am ende reines C++ zu schreiben?^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @n7revenant Klasse müssen in .NET instanziiert werden:

    C-Quellcode

    1. module module1 = new module(); // native Klasse
    2. module module1 = gcnew module(); // gemanagedte Klasse
    Ansonsten pack die Klasse in eine separate Datei und füge deren Header oben ein.
    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!
    Korrektur

    C-Quellcode

    1. module module1; // native Klasse aufm Stack
    2. module* module1 = new module(); // native Klasse aufm heap(selbst verwaltet)
    3. delete module1; // muss so vom heap gelöscht werden
    4. auto module1 = std::make_unique<module>(); // native Klasse aufm heap(wird bei verlassen des scopes automatisch gelöscht)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---