Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Syntaxfehler: Standardparameter können nicht in Funktionsparametern verwendet werden, was soll ich tun?

C++-Syntaxfehler: Standardparameter können nicht in Funktionsparametern verwendet werden, was soll ich tun?

WBOY
WBOYOriginal
2023-08-22 11:15:371545Durchsuche

C++-Syntaxfehler: Standardparameter können nicht in Funktionsparametern verwendet werden, was soll ich tun?

C++ ist eine leistungsstarke Programmiersprache, die häufig zur Entwicklung verschiedener Arten von Anwendungen und Software verwendet wird. Bei der C++-Programmierung können jedoch Situationen auftreten, in denen Standardparameter nicht in Funktionsparametern verwendet werden können. Dies wird normalerweise durch Syntaxfehler verursacht. Wie geht man also mit solchen Grammatikfehlern um? In diesem Artikel werden einige Methoden zur Fehlerbehandlung vorgestellt, damit Sie die C++-Programmierung besser verstehen.

Lassen Sie uns zunächst die Standardparameter verstehen. In C++ können Sie Standardwerte für Parameter in der Funktionsdefinition festlegen. Auf diese Weise verwendet der Compiler beim Aufruf der Funktion den Standardwert, wenn die entsprechenden Parameter nicht übergeben werden. Der folgende Code definiert beispielsweise eine Funktion add(), in der die Parameter a und b Standardwerte haben:

int add(int a = 0, int b = 0) {
    return a + b;
}

Beim Aufruf der Funktion add() können wir keine Parameter übergeben und die Standardwerte verwenden:

int result = add(); // result = 0

Allerdings in der Funktion Wie sollen wir mit dem Fall umgehen, in dem Standardparameter nicht in Parametern verwendet werden können? Dies umfasst normalerweise die folgenden Situationen:

Fall 1: Inkonsistenz zwischen Funktionsdeklaration und Funktionsdefinition

In C++ müssen Funktionen normalerweise an beiden Stellen deklariert und definiert werden. Die Deklaration wird normalerweise in der Header-Datei platziert, und die Definition ist normalerweise in der Quelldatei abgelegt. Wenn in der Funktionsdeklaration Standardparameter festgelegt sind, in der Funktionsdefinition jedoch nicht, besteht das Problem, dass die Standardparameter nicht in den Parametern verwendet werden können. Zum Beispiel:

// 声明
int add(int a, int b = 0);

// 定义
int add(int a, int b) {
    return a + b;
}

Der Parameter b in der Deklaration hier hat einen Standardwert, aber der Parameter b in der Definition hat keinen Standardwert und es treten Probleme auf. Die Lösung besteht darin, den Standardparameter in der Definition hinzuzufügen:

// 声明
int add(int a, int b = 0);

// 定义
int add(int a, int b /*= 0*/) {
    return a + b;
}

Fügen Sie einen Kommentar /= 0/ zum Parameter b in der Definition hinzu, der darauf hinweist, dass dieser Parameter ursprünglich einen Standardwert hatte, in der Definition jedoch überladen war.

Fall 2: Funktionsüberladung

Funktionsüberladung bezieht sich auf die Definition mehrerer Funktionen mit demselben Namen im selben Bereich, deren Parameterlisten jedoch unterschiedlich sind. Wird bei einer Funktionsüberladung ein Standardwert in den Parametern einer Funktion verwendet, müssen auch die Parameter anderer Funktionen mit demselben Namen auf Standardwerte gesetzt werden. Zum Beispiel:

int add(int a, int b) {
    return a + b;
}

int add(int a) {
    return a + 10;
}

int add(int a, int b = 0) {
    return a + b;
}

Hier werden drei Funktionen add() mit demselben Namen definiert. Die Parameter der zweiten Funktion haben keine Standardwerte, während die Parameter der anderen beiden Funktionen Standardwerte verwenden. Dies führt dazu, dass der Compiler nicht bestimmen kann, welche Funktion aufgerufen werden soll, was zu einem Fehler führt, der besagt, dass in den Parametern keine Standardparameter verwendet werden können. Die Lösung besteht darin, Standardwerte zu den Parametern aller Funktionen mit demselben Namen hinzuzufügen:

int add(int a, int b = 0) {
    return a + b;
}

int add(int a = 0) {
    return a + 10;
}

int add(int a, int b = 0) {
    return a + b;
}

Hier wird auch ein Standardwert zum Parameter a der zweiten Funktion und auch zu den Parametern der ersten und dritten Funktion hinzugefügt Funktionen.

Fall 3: Funktionszeiger und Funktionsreferenzen

In C++ können Funktionszeiger und Funktionsreferenzen auch zu Fehlern führen, da Standardparameter nicht in Parametern verwendet werden können. Dies liegt daran, dass der Compiler beim Aufrufen einer Funktion mithilfe eines Funktionszeigers oder einer Funktionsreferenz nicht feststellen kann, ob die Parameter der Funktion Standardwerte haben. Zum Beispiel:

typedef int(*add_func_ptr)(int a, int b = 0);

add_func_ptr p = add; // 函数指针

int(&add_ref)(int, int = 0) = add; // 函数引用

int result = p(1); // 编译错误:参数中不能使用默认参数

int result2 = add_ref(1); // 编译错误:参数中不能使用默认参数

Die Lösung besteht darin, den Standardwert zur Parameterliste des Funktionszeigers oder der Funktionsreferenz hinzuzufügen:

typedef int(*add_func_ptr)(int a, int b /*= 0*/);

add_func_ptr p = add;

int(&add_ref)(int, int /*= 0*/) = add;

int result = p(1); // 成功调用add(1, 0)

int result2 = add_ref(1); // 成功调用add(1, 0)

Kurz gesagt, wenn wir auf einen Fehler stoßen, dass die Standardparameter nicht in den Parametern verwendet werden können, sollten wir dies tun Überprüfen Sie den Code sorgfältig, um den Fehlerort herauszufinden. Wenn es sich um ein Problem mit Funktionsüberladung oder Funktionszeigern und Funktionsreferenzen handelt, sollten Standardwerte zu den Parameterlisten aller entsprechenden Funktionen hinzugefügt werden. Bei Inkonsistenzen zwischen Funktionsdeklaration und Funktionsdefinition sollten den Parametern in der Definition auch Standardwerte hinzugefügt werden. Solange diese einfachen Verarbeitungsmethoden verwendet werden, kann der Fehler behoben werden, dass die Standardparameter in den Parametern nicht verwendet werden können.

Das obige ist der detaillierte Inhalt vonC++-Syntaxfehler: Standardparameter können nicht in Funktionsparametern verwendet werden, was soll ich tun?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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