2013-12-21 3 views
0

Я хочу, чтобы получить доступ к этой функции в файл, известном как MinPriority.cpp:как передать объект по ссылке, чтобы использовать другой файл

MinPriority::priority& MinPriority::HEAP_EXTRACT_MIN(*this) //dequeue's min element of tree 
{ 
    MinPriority::priority& min = heapArray.front(); 
    heapArray.erase(heapArray.begin()); 
    MIN_HEAPIFY(0); 
    return min; 
} 

Это, как предполагается, из очереди элемента из вектора heapArray и передать объект priority в другой файл, известный как Graph.cpp. Вот где функция вызывается в Graph.cpp ...

void Graph::MST_PRIM() 
{ 
    MinPriority priority; 
    for(unsigned int i = 0; i != adjList.size(); i++) 
    { 
     priority.createArray(adjList[i].front().m_vertex, *this); 
    } 
    while(priority.queue_Empty() == false) 
    { 
     priority& u = priority.HEAP_EXTRACT_MIN(/*...*/); //graph.cpp 88 
    } 

} 

класс MinPriority объявлен как: (набросал его для простоты)

class MinPriority 
{ 
private: 
    class priority 
    { 
    public: 
     priority(string preVertex, string vertex, int weight) 
     { 
      m_preVertex = preVertex; 
      m_vertex = vertex; 
      m_weight = weight; 
     } 
     ~priority(){} 
     string m_preVertex; 
     string m_vertex; 
     int m_weight; 
    }; 
    vector<priority> heapArray; 
public: 
     //member functions are included here... 
}; 

в основном, в конце концов, я хочу быть в состоянии вытащить материал из heapArray, передать его функциям в Graph.cpp и, возможно, изменить вещи, уже находящиеся в heapArray из Graph.cpp. Мне никогда не нужно вводить вещи в структуру данных, поскольку они уже существуют (из-за функции, не показанной). Ошибка:

$ make -f makefile.txt 
g++ -Wall -W -pedantic -g -c Graph.cpp 
Graph.cpp: In member function `void Graph::MST_PRIM()': 
Graph.cpp:88: error: `u' undeclared (first use this function) 
Graph.cpp:88: error: (Each undeclared identifier is reported only once for each function it appears in.) 
Graph.cpp:88: error: no matching function for call to `MinPriority::HEAP_EXTRACT_MIN()' 
MinPriority.h:39: note: candidates are: MinPriority::priority& MinPriority::HEAP_EXTRACT_MIN(MinPriority::priority&) 
Graph.cpp: At global scope: 
Graph.cpp:97: warning: unused parameter 'vertex' 
makefile.txt:9: recipe for target `Graph.o' failed 
make: *** [Graph.o] Error 1 
+0

Почему у вас есть '* this' в списке' HEAP_EXTRACT_MIN' параметра? Это не скомпилируется. –

+0

Он работал в другой функции, которую мне помогли в этом посте: http://stackoverflow.com/questions/20723876/how-do-i-pass-an-object-by-reference-inside-parameters – user3040019

+0

Это минус * к * функции, а не в объявлении функции. В чем именно проблема, с которой вы сталкиваетесь? Какая у вас ошибка? –

ответ

1

Не уверен, что вы пытаетесь сделать с этим кодом:

MinPriority::priority& MinPriority::HEAP_EXTRACT_MIN(*this) //dequeue's min element of tree 
{ 
    MinPriority::priority& min = heapArray.front(); 
    heapArray.erase(heapArray.begin()); 
    MIN_HEAPIFY(0); 
    return min; 
} 

Но у вас есть несколько вопросов здесь:

  1. Метод не имеет типа аргумента, это просто * это не имеет смысла.
  2. Вы возвращаете ссылку на временное, это неопределенное поведение и, скорее всего, произойдет сбой.

Я думаю, что вы на самом деле нужен был метод обертка, чтобы вернуть переднюю часть и снимите дека его:

MinPriority::priority MinPriority::PopFront() 
{ 
    // Copy of the front element 
    MinPriority::priority min = heapArray.front(); 

    // Remove/destroy the front element 
    heapArray.erase(heapArray.begin()); 

    // Return the copy 
    return min; 
} 
+0

Да, я пытался это сделать, проблема, с которой я столкнулся, - это фактически доступ к функции (причина, по которой я задал вопрос.) – user3040019

+0

ссылается на graph.cpp: 88 в моем вопросе ... Что я мог сделать, чтобы правильно получить доступ к тому, что PopFront() возвращается? – user3040019

+0

g ++ -Wall -W -pedantic -g -c Graph.cpp Graph.cpp: В функции-члене 'void Graph :: MST_PRIM() ': Graph.cpp: 88: error: expected';' перед «u» Graph.cpp: 88: warning: инструкция не имеет эффекта – user3040019

Смежные вопросы