Ich bin ziemlich neu in C++ und ich habe wirklich Schwierigkeiten mit dem Versuch, eine einzelne Instanz einer Klasse ConflictGraph
zu definieren und Zugriff auf seine Methoden von verschiedenen Methoden innerhalb einer anderen Klasse ConvexHullBuilder
.'Class Instance Object' wurde in diesem Bereich nicht deklariert
Aus Gründen das Problem, ich brauche in ConvexHullBuilder::computeConvexHull()
ConflictGraph
auf einen bestimmten Punkt zu initialisieren, wenn ich ein paar Ecken haben und ein dcel
, dann muss ich ConflictGraph's initialize()
rufen richtig die ConflictGraph zu initialisieren. Das funktioniert gut. Das Problem tritt auf, wenn ich versuche, ConflictGraphs lookForVisibleFaces()
innerhalb ConvexHullBuilder::finalizeConvexHull
aufzurufen.
bekomme ich folgende Fehler
error: ‘conflictGraph’ was not declared in this scope
facesVisible = conflictGraph.lookForVisibleFaces(remainingVertices[i]);
^
Die Typen ein bisschen schwierig, aber nicht darauf achten zu ihnen. Ich brauche nur einen Einblick darüber, wie externe Klassenmethoden innerhalb des inneren Klassenmethoden für den Zugriff auf
ConflictGraph.h:
class ConflictGraph{
public:
ConflictGraph(DrawableDcel* dcel, std::vector<Dcel::Vertex*> vertices);
void initializeConflictGraph();
std::set<Dcel::Face*>* lookForVisibleFaces(Dcel::Vertex*);
private:
DrawableDcel *dcel;
std::vector<Dcel::Vertex*> tetrahedronVertices;
void checkVisibility();
}
ConflictGraph.cpp:
#include "conflictgraph.h"
/**
* @brief ConflictGraph::ConflictGraph() Constructor
* @params takes dcel and tetrahedron vertices as input
*/
ConflictGraph::ConflictGraph(DrawableDcel* dcel, std::vector<Dcel::Vertex*> tetrahedronVertices){
this->dcel = dcel;
this->tetrahedronVertices = tetrahedronVertices;
}
/**
* @brief ConflictGraph::initializeConflictGraph() initializes the conflict graph
*/
void ConflictGraph::initializeConflictGraph(){
//Check which faces see which vertices and viceversa
checkVisibility();//Works
}
/**
* @brief lookForVisibleFaces(Dcel::Vertex* vertex) finds which faces are visible from a given vertex
* @param VERTEX vertex given vertex
* @retuns map of visible faces and passed Vertex
*/
std::set<FACE>* ConflictGraph::lookForVisibleFaces(Dcel::Vertex* vertex){
. . .
}
ConvexHullBuilder.h:
#include "conflictgraph.h"
class ConvexHullBuilder{
public:
ConvexHullBuilder(DrawableDcel* dcel);
void computeConvexHull();
private:
DrawableDcel *dcel;
void finalizeConvexHull(std::vector<Dcel::Vertex*);
};
ConvexHullBuilder.cpp
#include "convexhullbuilder.h"
/**
* @brief ConvexHullBuilder::ConvexHullBuilder() Conmstructor
* @params takes dcel as input
*/
ConvexHullBuilder::ConvexHullBuilder(DrawableDcel* dcel){
this->dcel = dcel;
}
/**
* @brief ConvexHullBuilder::computeConvexHull() takes dcel as input.
* Starts the algorithm calling all the different functions needed.
* Adds Vertices, Builds a Tetrahedron . . .
*/
void ConvexHullBuilder::computeConvexHull(){
. . .
/** VerticesForCG is an array of pointers to vertex, properly filled
allVertices contains all the remaining vertices**/
//Initializes Conflict Graph with Dcel And First 4 Vertices
ConflictGraph conflictGraph = ConflictGraph(dcel, verticesForCG);
conflictGraph.initializeConflictGraph(); //Works
//Loop through remaining vertices
finalizeConvexHull(allVertices);//Does not Work
}
/**
* @brief ConvexHullBuilder::finalizeConvexHull starts last phase to build the convex hull
* @param VERTEX_POINTERS_LIST remainingVertices i=4 -> n vertices
*/
void ConvexHullBuilder::finalizeConvexHull(std::vector<Dcel::Vertex* remainingVertices){
//Loop through remaining vertices
for(unsigned int i=4; i<remainingVertices.size(); i++){
//Initializing faces visible by a vertex
std::set<Dcel::Face*>* facesVisible;
//Check Which faces sees i-Vertex and assigning them
facesVisible = conflictGraph.lookForVisibleFaces(remainingVertices[i]);//Error
}
}
EDIT
Ich habe auch versucht ConflictGraph
Instanz in ConvexHullBuilder.h
wie
private:
DrawableDcel *dcel;
ConflictGraph *conflictGraph;
Und in ConvexHullBuilder.cpp
vorbei:
{
//Initializes Conflict Graph with Dcel And First 4 Vertices
this->conflictGraph = new ConflictGraph(dcel, verticesForCG);
conflictGraph->initializeConflictGraph();
//Loop through remaining vertices
finalizeConvexHull(allVertices);
}
{
facesVisible = conflictGraph->lookForVisibleFaces(remainingVertices[i]);
}
Aber in ConvexHullBuilder.h
ich:
ConflictGraph
does not name a type
Ich habe versucht, einen Blick auf andere Antworten auf SO nehmen, aber ich war nicht in der Lage, mit ihnen mein Problem zu lösen.
Was verursacht diesen Fehler? Wie kann ich das verhindern? Wie kann ich verschiedene externe Klassenmethoden für innere Klassen verschiedener Methoden verwenden?
So viel Code. Wo ist dein [MCVE]? –
Viel Code? Ich lege nur das Kernstück von Codes. Die meisten Zeilen sind Kommentare, die versuchen, den Zweck des Algorithmus zu erklären. Wenn Sie denken, dass sie nutzlos sind, ist es eine andere Sache. – AndreaM16
Sie benötigen keine vier Dateien, um dieses Problem zu reproduzieren. Teil des Debuggens ist _minimizing_ your code. Lesen Sie die "[MCVE]" Seite bitte ich habe es nicht nur zum Spaß verlinkt. –