2013-12-22 3 views
0

내가이 함수에서 객체를 반환 할 수 있도록 내 중첩 클래스에 액세스하려고 :중첩 클래스의 객체를 만드는 방법은 무엇입니까?

Graph::Edge Graph::get_adj(int i) 
{ 
    Graph::Edge v; 
    int count = 0; 
    for(list<Edge>::iterator iterator = adjList[i].begin(); count <= i ;++iterator) 
    { 
     v.m_vertex = iterator->m_vertex; 
     v.m_weight = iterator->m_weight; 
    } 
    return v; 
} 

이 (가) 루프 (가 theoreticly 작동합니다)에 대해 걱정하지 말아 내 주요 문제는 객체 나던 Graph::Edge v;이 선언 함께 작업!

$ make -f makefile.txt 
g++ -Wall -W -pedantic -g -c Graph.cpp 
Graph.cpp: In member function `Graph::Edge Graph::get_adj(int)': 
Graph.cpp:124: error: no matching function for call to `Graph::Edge::Edge()' 
Graph.cpp:43: note: candidates are: Graph::Edge::Edge(const Graph::Edge&) 
Graph.h:27: note:     Graph::Edge::Edge(std::string, int) 
makefile.txt:9: recipe for target `Graph.o' failed 
make: *** [Graph.o] Error 1 

나는 내 수업 그래프가 선언되는 방법을 여기에

Graph.h:27: note:     Graph::Edge::Edge(std::string, int) 

에 액세스하려면 :이 오류가 나는 얻을 것이다 (필자는 기능을했다 단순성과에 몇 가지 *

class Graph 
{ 
private: 
    vector< list<Edge> > adjList; 
public: 
    Graph(); 
    ~Graph(); 
    class Edge 
    { 
    public: 
     Edge(string vertex, int weight) 
     { 
      m_vertex = vertex; 
      m_weight = weight; 
     } 
     ~Edge(){} 
     string m_vertex; 
     int m_weight; 
    }; 

    vector < list <Edge> > get_adjList(){return adjList;} 
    //Other functions.... 

}; 

는 기본적으로, 내가 알아야 할 모든이 기능에 에지의 객체를 선언하는 올바른 방법입니다) 쉽게 읽을 수 있도록. 나는 정말로 혼란스럽고, Graph :: Edge v 이외에 무엇을해야할지 모르겠습니다.

+0

지정되지 않은 * 정점의 인접성 목록의 정점 인접성 목록 또는 i 번째 인접성 항목을 반환해야한다면'get_adj (i)'의 의미를 이해하지 못합니까? 나는 당신의'adjList'가 꼭 꼭지점마다의 인접리스트라고 가정하고 있습니다.'adjList [i]'는 꼭지점'i'의 인접성을 포함하고 있습니다. – leemes

답변

4

Graph::Edge에는 인수가없는 기본 생성자가 없습니다. stringint을 사용하는 생성자 만 있습니다. 당신과 같이 기본 생성자를 줄 필요가 다음 중 하나

Edge() 
{ 
    // ... 
} 

또는 패스 stringint 객체 구성 :

Graph::Edge v("foo", 1); 
3

귀하의 문제는 당신이 가장자리에서 생성자를 선언 한 것입니다을 클래스 (Edge(string vertex, int weight)) 따라서 기본 생성자가 없습니다. Graph::Edge v과 같이 Edge 클래스의 인스턴스를 만들려고하면이 기본 생성자를 호출하려고 시도합니다.

Edge() 기본 생성자를 명시 적으로 선언하거나 생성 한 생성자를 사용하여 변수를 선언해야합니다.

관련 문제