C++: "Forms C3861: Der Bezeichner wurde nicht gefunden"?


21.04.2021, 15:33

Fehlermeldung

2 Antworten

Ich würde dir empfehlen, dein Projekt mal etwas ordentlicher zu strukturieren.

Beachte: In den folgenden Snippets deute ich nur an, fehlende Includes / Namespace-Deklarationen musst du selbst ergänzen.

1) Die Funktion genrandomzahlen sollte in einer Headerdatei deklariert werden (lies mehr zu dieser Konvention hier). In diesem Zuge könnte man ihr auch gleich noch einen besseren / einheitlicheren Namen spendieren.

random_numbers.h:

#ifndef RANDOM_NUMBERS_H
#define RANDOM_NUMBERS_H

#include <String>

String^ generateRandomNumbersAsString();

#endif

Die Include Guards (#ifndef, etc.) verhindern doppelte Deklarationen beim Kompilieren. Sollte die eingebundene Deklaration noch fehlen, wird sie eingebunden und das Makro (Zeile 2) angelegt. Erfolgt ein zweiter Einbindungsversuch, wird das Interface übersprungen, da das Makro dann schon existiert.

Die Funktionsdefinition würde ich ebenso in eine eigene Datei verschieben. So ist die Funktion später im Projekt schneller auffindbar.

random_numbers.cpp:

#include "random_numbers.h"

[STAThreadAttribute]
String^ generateRandomNumbersAsString()
{
  /* ... */
}

2) In Header-Dateien gehört eigentlich nur das Interface. Du nimmst dort aber ebenso die Implementation vor. Teile stattdessen auf. Das Interface in Header-Dateien, die Implementation in CPP-Dateien.

MyForm.h:

#ifndef MYFORM_H
#define MYFORM_H

// ...

class MyForm : Form {
  /* ... */

  private:
    System::Void button2_Click(System::Object^ sender, System::EventArgs^ e);
};

#endif

MyForm.cpp:

#include "MyForm.h"
#include "random_numbers.h"

using namespace System;

System::Void MyForm::button2_Click(System::Object^ sender, System::EventArgs^ e)
{
  /* ... */
}

3) Und zu guter Letzt fliegt noch die main-Funktion aus MyForm.cpp heraus. In einer Datei main.cpp ist sie besser aufgehoben.

Schlussendlich solltest du in deinem Projekt eine logische Struktur haben. Jeder Programmteil findet in dem Bereich Platz, wo er hingehört.

Dein Problem löst sich dabei ebenso auf. Die Implementationsdatei, die von der Zufallsfunktion Gebrauch macht, muss lediglich die Header-Datei inkludieren, die die Zufallsfunktion deklariert. Anhand der Includes können beim Kompilierprozess die Symbole (Methodennamen u.ä.) korrekt aufgelöst werden. Lies dazu auch hier.

Wert von Arraysize nicht angegeben

MrRedAbility 
Fragesteller
 21.04.2021, 15:31

Daran lag es nicht leider die Methode wird irgendwie nicht gefunden von der MyForm.h datei.

0
Pohuist  21.04.2021, 15:37
@MrRedAbility

Du musst einfach String genrandomzahlen(); in headerfile schreiben

0
MrRedAbility 
Fragesteller
 21.04.2021, 15:44
@Pohuist

Okay danke dir ! ich habe die (genrandomzahlen) Methode jetzt in die Header Datei eingefügt und es klappt. Aber kann man denn nicht von einer anderen Klasse die Methoden sonst benutzen, also von der MyForm.cpp Klasse?

0
Pohuist  22.04.2021, 17:18
@MrRedAbility

Ja mann kann einfach füge die Erklärung einer funktion in headerfile und rufe die in .cpp file auf

0