Hauptinhalt

Diese Seite ist für die vorige Version. Die entsprechende englische Seite wurde in der aktuellen Version entfernt.

Fehler beheben: Größen-Nichtübereinstimmung

Problem

Der Codegenerator erzeugt Größen-Nichtübereinstimmungsfehler, wenn die Arraygrößen nicht kompatibel sind oder eine implizite Erweiterung nicht verfügbar ist.

Die meisten binären Operatoren und Funktionen in MATLAB® und generierter Code unterstützten numerische Arrays mit kompatiblen Größen. Zwei Eingänge haben kompatible Größen, wenn die Größen der Eingänge für jede Dimension entweder identisch sind oder einer 1 beträgt. In den einfachsten Fällen sind zwei Arrays kompatibel, wenn sie exakt identisch sind oder es sich bei einem Array um einen Skalar handelt. Beispiel:

magic(4) + ones(4,1);
% where magic(4) =             ones(4,1)  = 
%   16     2     3    13                    1
%    5    11    10     8                    1
%    9     7     6    12                    1
%    4    14    15     1                    1
ans =

    17     3     4    14
     6    12    11     9
    10     8     7    13
     5    15    16     2

Das zweite Array wird implizit auf die Dimensionen der ersten Matrix erweitert. Weitere Informationen finden Sie unter Kompatible Arraygrößen für Basisoperationen.

Die implizite Erweiterung ist ggf. nicht verfügbar, wenn binäre Operationen an Arrays kompatibler Größe vorgenommen werden und mindestens eine der folgenden Bedingungen wahr ist:

Bei einer Größen-Nichtübereinstimmung oder nicht verfügbaren impliziten Erweiterung wird der folgende Fehler erzeugt:

%Size mismatch between two arrays
Size mismatch (size [10][1] ~= size [1][10])

Wenn die obenstehenden Bedingungen für Strukturfelder und Zellenelemente wahr sind, erzeugt der Codegenerator die folgenden Fehler:

%Size mismatch in structure fields
Size mismatch (size [10][1] ~= size [1][10]) in field StructField

%Size mismatch in cell elements
Size mismatch (size [10][1] ~= size [1][10]) in element cellElement.

Mögliche Lösungen

Überprüfen Sie, dass bei binären Operationen mit aktivierter impliziter Erweiterung die Operationen sich im Funktionsumfang befinden. Überprüfen Sie diese Bedingungen:

  • Arraygrößen-Kompatibilität.

  • Binäre Operationen im Funktionsumfang, die coder.noImplicitExpansionInFunction aufrufen.

  • coder.sameSizeBinaryOp führt keine implizite Erweiterung der Operanden durch und unterstützt keine Skalar-Erweiterung.

  • Wenn Sie die implizite Erweiterung für das gesamte Projekt deaktiviert haben, erzeugen alle Operationen, die implizite Erweiterung erfordern, einen Fehler.

Durchführen binärer Operationen an Arrays kompatibler Größe

Wenn Sie eine binäre Operationen an Array unterschiedlicher Größe ausführen müssen, achten Sie darauf, dass die Größen kompatibel sind und implizite Erweiterung im Funktionsumfang aktiviert ist. Siehe Kompatible Arraygrößen für Basisoperationen.

Aufrufen einer binären Operation ohne coder.noImplicitExpansionInFunction

Wenn Sie coder.noImplicitExpansionInFunction in Ihre Funktion aufnehmen müssen, rufen Sie die erforderliche binäre Operation in einer anderen Funktion mit aktivierter impliziter Erweiterung auf.

Aufrufen einer binären Operation ohne coder.sameSizeBinaryOp

Wenn Sie implizite Erweiterung nicht für eine bestimmte Operation nutzen möchten, stellen Sie für coder.sameSizeBinaryOp Eingabeargumente mit derselben Größe bereit. coder.sameSizeBinaryOp erlaubt keine Skalar-Erweiterung und erzeugt einen Fehler, wenn die Eingabeargumente nicht dieselbe Größe haben.

Aktivieren von impliziter Erweiterung für ein Projekt

Wenn das Aktivieren impliziter Erweiterung Ihr Projekt nicht beeinträchtigt, können Sie diese aktivieren, indem Sie die Eigenschaft EnableImplicitExpansion in Ihrem Code-Konfigurationsobjekt auf true setzen.

Wenn Sie implizite Erweiterung für bestimmte Operationen benötigen, verwenden Sie coder.sameSizeBinaryOp oder coder.noImplicitExpansionInFunction, um eine implizite Erweiterung der anderen Operationen zu verhindern. Siehe Optimize Implicit Expansion in Generated Code.

Siehe auch

|

Themen