2016-03-13 3 views
0

У меня есть следующий код и он не компилируется, когда я создаю объект с пустым конструктором, как так:Создание объекта с пустым конструктором

PriorityQueue pq1(); 
pq1.insert(3); // doesn't compile 

Но это скомпилировать, как это:

PriorityQueue pq2 = PriorityQueue(); 
pq2.insert(3); // compiles 

Почему это происходит?

PriorityQueue.h

class PriorityQueue 
{ 
public: 
    PriorityQueue(); // Create the heap 
    ~PriorityQueue(); // Destroy the heap 
} 

PriorityQueue.cpp

#include "PriorityQueue.h" 

PriorityQueue::PriorityQueue() 
{ 

} 

main.cpp

#include "PriorityQueue.h" 

int main() 
{ 
    PriorityQueue pq1(); 
    pq1.insert(3); // doesn't compile 

    PriorityQueue pq2 = PriorityQueue(); 
    pq2.insert(3); // compiles 
} 
+1

'PriorityQueue PQ1()' должен быть 'PriorityQueue PQ1,' иначе это объявление функции –

+0

@EdHeal о мальчик ... – dimitris93

ответ

4
PriorityQueue pq1(); 

Вышеприведенный оператор не создает объект. Это объявление функции pq1, тип возврата которого PriorityQueue.

PriorityQueue pq1; // Remove() 

Most Vexing parse

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