Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

header-file

Empfohlene Antworten

Veröffentlicht

hi,

ich möchte mir einen eigenen kleine header-file anlegen und per include anweisung einbinden. wie unten dargestellt habe ich eine "fc_math.h" und eine "fc_math.cpp" datei, aber irgendwie klappt es nicht. weiß jemand rat ?

fc_math.h

--------------------------------------

#ifndef FC_MATH_H

#define FC_MATH_H

class fc_math

{

public:

fc_bogenm();

fc_grad();

virtual ~fc_math();

protected:

private:

};

#endif // FC_MATH_H

fc_math.cpp

-------------------------------------------

#include "fc_math.h"

// Umwandlung Grad in Bogenmass

double fc_bogenm(double grad)

{

return (grad / 180.0 * 3.1415927);

}

// Umwandlung Bogenmass in Grad

double fc_grad(double bogenmass)

{

return (bogenmass / 3.1415927*180.0);

}

Eine ordentliche Fehlerbeschreibung ist immer hilfreich. Mit "irgendwie klappt es nicht" kann man nichts anfangen.

Wenn du deine Methoden außerhalb der Klassendefinition definierst, musst du den Klassennamen dazuschreiben:

double fc_math::fc_bogenm(double grad)

Und lass den virtuellen Destruktor weg, das ist Unsinn.

aufruf: fc_math::fc_bogenm(45.0)

führt zu folgenden fehlermeldungen:

c++ forbids declaration of "fc_bogenm" with no type

c++ forbids declaration of "fc_grad" with no type

no matching function for cal to "fc_math::fcbogenm(double)"

ich dachte ich könnte die selbstdefinierten befehle einfach so nutzen als stünden sie im eigentlichen progi

#include <cstdlib>

#include <iostream>

#include <math.h>

#include <stdio.h>

#include <K:\Programmieren\c++\Bibliotheken\fc_math\fc_math.h>

using namespace std;

int main()

{

cout << "\n" << fc_math::fc_bogenm(45.0);

}

Hi,

fc_bogenm();

du hast eine Funktion, die nichts erwartet, du übergibst aber...

fc_bogenm(double);

Außerdem musst du erst ein Objekt erstellt, was du nicht tust. Deine Syntax ist falsch. Richtig wäre:


...

using namespace std;


// Ein Objekt blah vom Typ fc_math erstellen...

fc_math blah;


int main()

{


cout << "\n" << blah.fc_bogenm(45.0);


} 

und wie mache ich z.b. fc_bogenm static ?

und wie mache ich z.b. fc_bogenm static ?

Indem du in der Klassendefinition static davorschreibst.

Beachte auch carstenjs Hinweis: In der Klassendefinition hast du deine Methoden ohne Parameter deklariert, definiert hast du sie aber mit einem double-Parameter. Dass muss einheitlich sein.

ich glaube, ich muss mir da erst noch ein bißchen anlesen..

ich dachte man könnte die funktionen einfach auslagern, dann im progi dazuladen, um sie dann mit ihrem "normalen" namen zu nutzen

steht irgendwo schritt für schritt erkälrt, wie ich einen headerfile anzulegen habe ?

ich dachte man könnte die funktionen einfach auslagern, dann im progi dazuladen, um sie dann mit ihrem "normalen" namen zu nutzen
Was meinst du mit "normalem Namen"? War fc_bogenm vorher eine freie Funktion, und du hast sie nur zum "Auslagern" in eine Klasse gesteckt?

Wenn du eine Methode einer Klasse aufrufen willst, musst du das wie gezeigt machen. Das hat nichts damit zu tun, ob diese Klasse in einer eigenen Codedatei samt Header liegt.

steht irgendwo schritt für schritt erkälrt, wie ich einen headerfile anzulegen habe ?
Dein Headerfile ist völlig in Ordnung, wenn man davon absieht, dass die Signaturen der Methoden nicht auf die Definitionen passen.

Zeig doch mal, wie dein ganzes Programm ohne "Auslagern" aussehen würde. Vielleicht lässt sich dann nachvollziehen, wo das Verständnisproblem liegt.

#include <cstdlib>

#include <iostream>

#include <math.h>

#include <stdio.h>

#include <K:\Programmieren\c++\Bibliotheken\fc_math\fc_math .h>

using namespace std;

// Umwandlung Grad in Bogenmass

double fc_bogenm(double grad)

{

return (grad / 180.0 * 3.1415927);

}

int main()

{

cout << "\n" << fc_bogenm(45.0);

}

also wenn ich ehrlich bin, hat es mein compiler automatisch angelegt :rolleyes:

also wenn ich ehrlich bin, hat es mein compiler automatisch angelegt :rolleyes:
Ein Compiler legt keine Codedateien an, allenfalls tut das deine Entwicklungsumgebung. Das ist dann aber ein Bedienproblem.

fc_math.h sollte so aussehen:

#ifndef FC_MATH_H
#define FC_MATH_H

double fc_bogenm(double grad);

#endif // FC_MATH_H[/code] Und fc_math.cpp so:
[code]double fc_bogenm(double grad)
{
return (grad / 180.0 * 3.1415927);
}

Hi,

wobei ich mich frage, was du (@cadman) eigentlich genau machen möchtest?

Willst du Objektorientierung lernen, oder "einfach" nur deine Aufgabe lösen, mit Auslagerung in einer Headerdatei?

Das, was du jetzt hast, funktioniert zwar, hat aber mit Objektorientierung nichts zu tun.

Erst einmal danke für die Hilfe

Ich stecke halt noch ganz am Anfang und teste dieses und jenes.

Aber mathematische Funktionen muss man doch nicht in eine Klasse legen, wo liegt der Vorteil ?

Hi,

Aber mathematische Funktionen muss man doch nicht in eine Klasse legen, wo liegt der Vorteil ?

es gibt keinen, ich war mir nur nicht sicher, was du lernen möchtest und wollte dich darauf hinweisen.

Hallo,

ich habe mich genau an den Code von Klotzkopp gehalten und erhalte nun eine Fehler meldung wie im Anhang dargestellt.

post-76207-14430448884335_thumb.jpg

aber ich habe doch "fc_math.h" mit include eingebunden

wie füge ich denn "fc_math.cpp" meinem projekt hinzu

"projekt/makefile" was heißt das ?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.