C ++ Vektor von Vektoren

8

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?

    
xbonez 26.04.2010, 22:59
quelle

5 Antworten

17

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

sein %Vor%

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.

    
Jonathan M Davis 26.04.2010, 23:01
quelle
8

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%     
A. Levy 26.04.2010 23:02
quelle
4

Ich glaube, du willst so etwas ... (obwohl ich mir nicht vorstellen kann, warum: -))

%Vor%     
Jive Dadson 26.04.2010 23:43
quelle
3

Das brauchst du:

%Vor%     
Pedro Torres 06.12.2012 01:12
quelle
1

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%     
KevenK 26.04.2010 23:05
quelle

Tags und Links