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)
{
...
}
4

3 に答える 3

2

の宣言で、初期化式を使用してコンストラクターを部分的に宣言しようとしていますPriorityQueue(Graph*):infiniteDist(9999);。これは許可されていません。宣言 (通常は .h ファイル内) は、次のようにする必要があります。

PriorityQueue(Graph* graph);

定義 (通常は .cpp ファイル内) は次のようになります。

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

その理由は単に、名前と戻り値の型の単なる宣言ではなく、イニタライザ リストがすでに定義の一部になっているためです。つまり、メソッドの動作です。宣言で別の数値 (たとえば 42) を使用し、定義で別の数値 (9999) を使用するとしたら、どちらを使用する必要があるでしょうか? したがって、許可されていません。

于 2013-11-04T10:34:04.867 に答える
1

これを変える

PriorityQueue(Graph*):infiniteDist(9999);

PriorityQueue(Graph*);
于 2013-11-04T10:30:10.697 に答える
1

PriorityQueue(Graph*):infiniteDist(9999);間違っている。

ヘッダーでコンストラクター全体を定義するか、ボディを追加するか、次のように宣言するだけです。PriorityQueue(Graph*);

解決策 2 が最適です。

于 2013-11-04T10:30:29.563 に答える