Heim > Backend-Entwicklung > C++ > Warum verursacht mein Konstruktor ohne Argumente den Fehler „Request for Member'?

Warum verursacht mein Konstruktor ohne Argumente den Fehler „Request for Member'?

Linda Hamilton
Freigeben: 2024-12-08 21:26:11
Original
533 Leute haben es durchsucht

Why Does My No-Argument Constructor Cause a

Überladene Konstruktoren und Zugriffsfehler auf Klassenmitglieder

Stellen Sie sich eine Klasse mit zwei Konstruktoren vor, einen ohne Argumente und einen anderen mit einem einzelnen ganzzahligen Argument. Während das Erstellen von Objekten mit dem letztgenannten Konstruktor wie vorgesehen funktioniert, führt die Verwendung des Konstruktors ohne Argumente zu einem Fehler.

Zum Beispiel wird beim Kompilieren des folgenden Codeausschnitts:

class Foo
{
public:
    Foo() {};
    Foo(int a) {};
    void bar() {};
};

int main()
{
    // This works...
    Foo foo1(1);
    foo1.bar();

    // This fails...
    Foo foo2();
    foo2.bar();

    return 0;
}
Nach dem Login kopieren

der folgende Fehler generiert :

error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
Nach dem Login kopieren

Dieser Fehler tritt auf, weil der Compiler den Code Foo foo2(); interpretiert. als Funktionsdeklaration mit dem Namen „foo2“ und dem Rückgabetyp „Foo“. Sie beabsichtigen jedoch, ein Objekt vom Typ „Foo“ mit dem Konstruktor ohne Argumente zu instanziieren.

Um dieses Problem zu beheben, ändern Sie Foo foo2(); zu Foo foo2;. Diese Änderung informiert den Compiler darüber, dass Sie ein Objekt mit dem Standardkonstruktor erstellen möchten.

Alternativ kann ein Fehler auftreten, der auf Mehrdeutigkeit in überladenen Konstruktoren hinweist, da sowohl der Konstruktor ohne Argument als auch der Konstruktor mit einem Argument vorhanden sind . In solchen Fällen kann der explizite Aufruf des Konstruktors ohne Argumente mit Foo foo2{}; wird die Unklarheit beseitigen.

Das obige ist der detaillierte Inhalt vonWarum verursacht mein Konstruktor ohne Argumente den Fehler „Request for Member'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage