Das Schlüsselwort static
in der C++ Sprache überlastet ist (d.h. es hat mehrere Bedeutungen). In dem Code, den Sie präsentiert:
struct MyStruct {
};
static float MyStaticFunction(MyStruct, MyStruct);
die Bedeutung von static
ist interne Bindung (dh das Symbol nicht nutzbar außerhalb der aktuellen Übersetzungseinheit wird, wenn diese in einem Header vorhanden ist, dann von denen jede Übersetzung. Gerät seine eigene Kopie der Funktion erhalten in diesem Fall Nutzung ist die einer Freisprechfunktion.
MyStruct a,b;
float f = MyStaticFunction(a, b);
aus dem Versuch scheint es zu benutzen, dass das, was Sie gemeint war static
in diesem alternativen Szenario mit:
struct MyStruct {
static float MyStaticFunction(MyStruct, MyStruct);
};
wo es eine andere Bedeutung hat: das Mitglied gehört zu der Klasse, nicht zu einer bestimmten Instanz. In diesem Fall kann die Funktion in einer von zwei Möglichkeiten genannt werden, die häufigste ist:
MyStruct a,b;
float f = MyStruct::MyStaticFunction(a, b);
obwohl auch die Sprache erlaubt (ich würde es nicht empfehlen, verwenden, kann es verwirrend sein):
float f a.MyStaticFunction(a,b);
Wo die Verwirrung entsteht, weil es wie ein Aufruf Mitglied Funktion auf a
sieht, anstatt eine statisches Element Funktion auf der Klasse aufrufen.
Die Verwendung von 'typedef' in der Definition von' Mystruct' ist nutzlos. Ich würde empfehlen, dass Sie es entfernen, aber wenn Sie wirklich die * kleine * Differenz benötigen, die es in C++ macht, müssen Sie einen Namen für das typedef 'typedef struct MyStruct {..} MyStruct;' angeben. Wieder würde ich es einfach fallen lassen. Mehr [hier] (http: // stackoverflow.com/a/1675446/36565), beachten Sie, dass selbst wenn der Hauptfokus C ist, die Antwort auch C++ behandelt –