Ich habe eine Klassenheaderdatei namens Grid.h, die die folgenden 2 privaten Datenobjekte enthält:
%Vor%Und eine öffentliche Methode, deren Prototyp in Grid.h so ist:
%Vor%Die Definition der oben genannten Funktion ist in Grid.cpp wie folgt definiert:
%Vor%Wenn ich das Programm starte, bekomme ich diesen Fehler:
%Vor%Was läuft falsch?
In der Zeile return row[row][col];
ist die erste row
die int&
, nicht die vector
.
Die im inneren Bereich deklarierte Variable überschattet die Variable im äußeren Bereich, sodass der Compiler versucht, ein int
anstatt eines vector
zu indizieren, was er offensichtlich nicht kann.
Sie sollten Ihre Variablennamen korrigieren, damit sie nicht in Konflikt geraten.
BEARBEITEN: Auch wenn der Fehler, den Sie bekommen, anzeigt, dass der Compiler die falsche row
Variable findet, wie A. Levy herausstellt, haben Sie auch ein Problem mit der Deklaration von deinem vector
, also selbst wenn du die Variablennamen korrigierst, wenn du tatsächlich vector
wie hier gezeigt deklariert hast, wird es nicht kompiliert. Verschachtelte Templates benötigen Leerzeichen zwischen den >
-Symbolen, andernfalls liest der Compiler >>
als Operator mit Rechtsverschiebung und nicht als Teil einer Template-Deklaration. Es muss
oder
%Vor% Da Sie dies in einer Header-Datei tun, müssen Sie außerdem das std::
-Tag auf der Vorderseite eines beliebigen Namens im std-Namespace anheften - beispielsweise vector
. Wenn es in einer cpp-Datei wäre, könnten Sie using namespace std;
verwenden, aber das wäre sehr schlecht in einer Header-Datei (da es den globalen Namespace verschmutzen würde). Ohne den std::
-Tag oder die using
-Anweisung erkennt der Compiler vector
nicht.
Dies ist wahrscheinlich nicht das Indexproblem, aber Sie benötigen auch ein Leerzeichen zwischen den geschachtelten spitzen Klammern in Ihrer Vektorvektortyp-Deklaration. C ++ Compiler haben es schwer, den Unterschied zwischen verschachtelten Template-Typen und dem richtigen Bit-Shift-Operator zu erkennen.
Beispiel:
%Vor%Ich glaube, du willst so etwas ... (obwohl ich mir nicht vorstellen kann, warum: -))
%Vor% Es scheint mir (obwohl Sie dies vielleicht selbst verifizieren müssen, ich habe keine Lust, eine Testanwendung zu schreiben), dass das Problem von der Tatsache herrührt, dass Ihr Parameter ein benanntes row
und Ihr enthält Klasse hat eine innere Variable row
und es gibt einen Namenskonflikt.
Möglicherweise müssen Sie sich für die von Ihnen verwendete Zeile qualifizieren. Überlegen Sie:
%Vor%