7 Stimmen

Kann NULL nicht an eine Funktion senden, die einen Vektor erhält

Ich habe diese Funktion:

    void RegMatrix::MatrixInit(int numRow, int numCol, std::vector fill)

    {

      do something;

    }

und ich möchte Folgendes senden:

MatrixInit(numRow, numCol, NULL);

wie kann ich NULL als Vektor übergeben?

17voto

K-ballo Punkte 79342

Sie können NULL nicht als Vektor übergeben, stattdessen könnten Sie einen leeren Vektor übergeben, wie hier:

MatrixInit( numRow, numCol, std::vector() )

Beachten Sie, dass es besser wäre, den fill Vektor als const& zu übergeben.

13voto

Remy Lebeau Punkte 498719

Um NULL zu übergeben, müssen Sie Ihren Parameter ändern, um einen vector*-Pointer zu akzeptieren, z. B .:

void RegMatrix::MatrixInit(int numRow, int numCol, std::vector *fill)
{
    if (fill != NULL)
    {
        Mach etwas mit fill;
    }
}

Wenn Sie einen Vektor übergeben müssen, würden Sie es dann so machen:

std::vector v;
MatrixInit(numRow, numCol, &v);

2voto

Mark Ransom Punkte 283960

Wenn Sie einen Wert möchten, der einen speziellen Fall darstellt, können Sie eine statische Variable erstellen und dagegen testen.

static std::vector null_fill;

void RegMatrix::MatrixInit(int numRow, int numCol, const std::vector & fill = null_fill)
{
    if (&fill == &null_fill)
        // etwas Besonderes machen
    else
        // etwas machen;
}

0voto

MSalters Punkte 166675

Sie könnten das Argumenttyp boost::optional > nennen

Wie der Name sagt, handelt es sich um ein optionales Argument. Wenn Sie das Argument nicht verwenden, übergeben Sie stattdessen boost::none. (nicht NULL; das ist eine Nullzeigerkonstante und wir verwenden hier keine Zeiger).

0voto

Hritik Sharma Punkte 1442

Du kannst in C++ keinen Null-Vektor haben.

C++ ist eine Werttyp-Sprache. Eine Variable vom Typ Vektor enthält den Wert des Vektors direkt, NICHT eine Referenz auf einen Vektor wie in Java.

MatrixInit(numRow,numCol,NULL);

Die obige Aussage wird einen Fehler geben: Kann NULL (null) nicht in std::vector umwandeln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X