2013-11-04 77 views
1

我在下面的標題中遇到了構造函數簽名的問題。編譯器給我的消息:前「*」令牌預期「)」錯誤:'*'標記之前的預期')'

誰能告訴我,我會在這裏失去了:

錯誤?

#ifndef PRIORITYQUEUE_H 
#define PRIORITYQUEUE_H 

#include <iostream> 
#include <cstdlib> //We'll need to use srand() and rand() as well as clock() 
#include <ctime> 
#include <vector> 
#include <list> 
#include "Graph.h" //header for Graph class 

using namespace std; 

class PriorityQueue 
{ 

public: 

    PriorityQueue(Graph*):infiniteDist(9999); 

    void set_previous_node(int, int); 

    int get_node_value(int); 

    void set_node_value(int, int); //Change the node value of an element 

    void markVisited(int); 

    bool contains(int); //Does the queue contain a particular vertex? 

    void insertIntoQueue(int); 

    int top(); //pick an unvisited node with the shortest distance. 

    int queueSize(); 

    void print(); 

private: 

    class vertexNode { 
    public: 
     int nodeNum; 
     int nodeValue; 
     int previousNode; //previous node visited with shortest distance from source 
     bool wasVisited; 
    }; 

    vector<vertexNode> nodeValues; 
    const int infiniteDist;   //value to represent infinite distance 
    int nodeQuantity; 


}; 

#endif // PRIORITYQUEUE_H 

的實際構造函數用作:

PriorityQueue::PriorityQueue(Graph* graph):infiniteDist(9999) 
{ 
... 
} 

回答

1

改變這種

PriorityQueue(Graph*):infiniteDist(9999); 

PriorityQueue(Graph*); 
1

PriorityQueue(Graph*):infiniteDist(9999);是錯誤的。

要麼你定義在頭你的整個構造9ie添加機構)或你只需要到聲明PriorityQueue(Graph*);

解決方案2是最好的一個。

2

您試圖通過在聲明PriorityQueue(Graph*):infiniteDist(9999);的聲明中使用初始化表達式部分聲明構造函數。這是不允許的。聲明(通常在.h文件),應該只是:

PriorityQueue(Graph* graph); 

定義(通常在.cpp文件),然後應是:

PriorityQueue::PriorityQueue(Graph* graph) 
    : infiniteDist(9999) 
{ 
... 
} 

原因很簡單,就是initaliser名單已經是定義的一部分,即什麼方法做,而不僅僅是一個聲明的名稱和返回類型。想象一下,你會在聲明中使用不同的數字(比如42),而在定義中使用另一個數字(9999),應該使用哪一個?因此這是不允許的。

+1

感謝您的回答!我沒有意識到這一慣例,並將在未來更仔細地遵循它。不幸的是,相同的「預期」)'*'符號之前'仍然出現錯誤,並且出現在同一行。我能擺脫它併成功編譯我的代碼的唯一方法是徹底取消頭,並將所有內容包含在一個cpp文件中。 –

+0

鑑於此錯誤,似乎編譯器無法識別'Graph'類。在你的代碼中,我無法弄清楚爲什麼,但是你可能還沒有真正定義過'Graph',或者'Graph.h'包含另一個'#include'到'PriorityQueue.h',用於例。 – Yellow

相關問題