Deklarieren von Variablen innerhalb von Funktionen einer Klasse in C++
MyFill ist eine Klasse und MyFill2 ist eine Funktion innerhalb dieser Klasse.
Was ist der Unterschied zwischen der Deklaration einer variable innerhalb der öffentlichen Funktion der Klasse wie folgt aus (Dicke und Linientyp) -->
MyFill::MyFill (Mat img, Point center)
{
MyFill2 (img, center);
}
void MyFill::MyFill2(Mat img, Point center)
{
int thickness = -1;
int lineType = 8;
circle (
img,
center,
w/32,
Scalar( 0, 0, 255 ),
thickness,
lineType
);
}
...und nur deklarieren Sie im private-label (private:), wie in der header-Datei -->
class MyFill {
public:
MyFill(Mat img1, Point center1);
void MyFill2 (Mat img, Point center);
private:
int thickness = -1;
int lineType = 8;
};
Den ersten richtig funktioniert. Aber die zweite nicht. Wenn ich wählen Sie die zweite option, was muss ich tun? Eine richtige code mit einer kurzen Erklärung helfen könnte.
- was funktioniert nicht?
- Ich war immer ein Fehler: nur statische Konstante Integrale Datenmember können innerhalb einer Klasse initialisiert
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie nicht berechtigt, zuweisen von Werten zu Variablen innerhalb des Gültigkeitsbereichs der Klasse, Sie können dies nur innerhalb einer Funktion oder im globalen Bereich.
Ihre header muss geändert werden, um die oben genannten. Setzen Sie dann Ihre Werte in jeder Funktion, die Sie wollen, vorzugsweise Konstruktor in etwa so:
Edit - Um deine Frage in den Kommentaren:
Bezeichner für Variablennamen in function-Parameter nicht übereinstimmen müssen zwischen Deklaration und definition, nur die Typen und Ihre Reihenfolge müssen übereinstimmen. Es macht es klarer, aber nicht erforderlich.
Einen Funktionsprototyp ist wirklich nur gesehen wie die folgenden:
Geben, wenn Sie es eine definition, dass bei der Vergabe der Identifier für Sie wirklich zählt:
Du erklären die member-Variablen in der definition der Klasse, dann in den Konstruktor verwenden Sie eine Initialisierungsliste zur Initialisierung der member-Variablen:
Was ist der Unterschied zwischen der Deklaration einer variable innerhalb der öffentlichen Funktion der Klasse wie folgt aus (Dicke und Linientyp)
Dicke und Linientyp definiert werden Funktionsumfang, es heißt lokale variable von MyFill2 Funktion.
Indem Dicke und Linientyp in Klasse Anwendungsbereich, Sie sind Mitglied der Klasse MyFill, und es gibt Sie in allen MyFill Objekte.
In C++03, könnten Sie zum initialisieren der Klasse in den Initialisierungsliste
Hoffe, das beantwortet Ihre Frage.
können Sie nicht zuweisen Werte in der class-Deklaration.
Sie sollten tun, dass in den Konstruktor der Klasse:
Im ersten Fall deklarieren Sie lokale Variablen gelten nur innerhalb der Funktion Bereich. Außerhalb, können Sie Sie verwenden.
In die letztere erklärt Sie für den Umfang der Klasse, so könnte man verweisen Sie in eine beliebige Funktion der Klasse.
Beachten Sie, dass Ihr Stil der Initialisierung funktioniert nur, wenn Sie eine C++11-konformen compiler, die mit C++03, müssten Sie initialisieren Sie diese im Konstruktor:
und nur zu erklären als
Wenn Sie nur benötigen diese Variablen, die einer Funktion mit lokalen Variablen.
C++11 erlaubt die Initialisierung von nicht-const-und nicht-statische member innerhalb der Klasse Erklärung, Sie können sich an den Diskussionen in diesem Seite