2014-04-06 3 views
0

구조체가 내 클래스의 한 기능에만 있습니다. 디버깅을하고 생각할 수있는 모든 것을 시도했습니다. 이것은 그래프 용이며 함수는 Dijkstra 공식을위한 것입니다. 내가 얻는 주된 문제는 내 데이터가 벡터 (벡터 열기)에 절대 들어 가지 않는다는 것입니다.구조체의 데이터를 해당 구조체의 벡터에로드하는 문제

이 기능에서 모든 문제가 발생하므로 모든 코드가 필요한지 확실하지 않습니다. 현재 사용되지 않는 코드 (먼저 벡터에 데이터를 가져 오는 중)가 주석 처리되었습니다.

void Graph::Dijkstra(string start, string end, vector<string> &path) 
{ 
    struct node 
    { 
     string name; 
     vector<string> connection; 
     int costSoFar; 

     node() {name = " "; costSoFar = 0;} 

     node(node& other) 
     { 
      name = other.name; 
      connection = other.connection; 
      costSoFar = other.costSoFar; 
     } 
    }; 

    vector<string> adjacent; 
    node startNode; 
    node current; 
    node endNode; 
    vector<node> open; 
    node closed[MAX_VERTICES]; 
    int small, temp; 
    bool found = false; 
    bool inClosed = false; 
    bool inOpen = false; 
    string tempVertex; 

    // starting node is added open list 
    // startNode = node(); 
    startNode.name = start; 
    startNode.costSoFar = 0; 

    //adjacent.push_back(startNode.name); 
    open.push_back(startNode); 

    temp = 0; // used a place holder for debugging 
    //open[0].name = startNode.name; 
    //open[0].costSoFar = startNode.costSoFar; 
} 

모든 도움을 주시면 감사하겠습니다. 유사한 게시물을 살펴본 결과 내 벡터가 직접 적용하려고해도 왜 내 벡터가 입력을받지 않는지에 대한 확실하지 않은 제안을 시도했습니다 (위의 주석 코드 참조). 당신이 하나를 제공하지 않는 경우 기본 복사 생성자의 형태이다

node(const node& other); 

:

+0

관련 없음 :'startNode = node();'는 쓸모가 없습니다. 그것의 이미 건설 된'노드'. – WhozCraig

+0

벡터에서 볼 수없는 데이터는 무엇입니까? 벡터 열기가 로컬이고 함수를 종료 한 직후에 할당이 해제된다는 것을 알고 있습니까? –

+0

C++ 11 이전에는 함수 내에서 로컬로 정의 된 구조체 벡터를 사용하는 것이 적절하지 않았습니다. 'struct node'를 파일 범위로 옮겨보고 차이가 있는지 봅니다. –

답변

0

나는 표준 컨테이너 형태의 복사 생성자를 필요로 생각합니다. 복사 생성자를 제공하면이 기본 생성자가 제공되지 않으므로 해당 형식 중 하나를 정의해야합니다.

+0

그는 복사 생성자를 제공했습니다. 그러나 컴파일러가 컴파일하지 않으면 생성자가 컴파일러를 생성하므로 올바른 것입니다. –

+0

네, 제 대답은 명확하지 않을 수도 있지만, 그 뜻은 그가 그 형태의 복사 생성자가 필요하다는 것과 그 중 하나가 없다는 것입니다. 'node (node ​​& other) '를'node (const node & other)'로 변경하면 효과가있을 수 있습니다. – Nathan

+0

@Nathan 그 형식도 시도해 봤지만 내 노드의 데이터 문제를 벡터 열기를 결코 해결하지 못했습니다 – user3502995

0

확인 내 솔루션을 찾았습니다. 구조체가 함수 내부에서 생성되어 필요한 방식으로 변수에 액세스 할 수없는 경우 나타납니다. 내가 한 일은 노드 구조체를 함수 외부로 옮기는 것이 었습니다.

struct node 
{ 
    string name; 
    vector<string> connection; 
    int costSoFar; 

    node() {name = " "; costSoFar = 0;} 

    node(const node& other) 
    { 
     name = other.name; 
     connection = other.connection; 
     costSoFar = other.costSoFar; 
    } 
}; 

void Graph::Dijkstra(string start, string end, vector<string> &path) 
{ // the other code needed } 
+0

Matt McNabb이 말한 바로 그 것입니까? –

+0

죄송합니다. 그 사람이 처음에 그 소식을 놓쳐 버린 것 같습니다. – user3502995