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);是错的。

您可以在标题中定义整个构造函数9ie添加正文),或者您只需使用PriorityQueue(Graph*);

解决方案 2 是最好的解决方案。

于 2013-11-04T10:30:29.563 回答