错误:在'*'标记之前预期')'

时间:2013-11-04 10:26:55

标签: c++ c++11

我在下面的标题中遇到了构造函数签名的问题。编译器给我的信息是:

错误:预期')'在'*'标记之前

有人可以告诉我这里可能缺少什么吗?

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

3 个答案:

答案 0 :(得分:2)

您试图在PriorityQueue(Graph*):infiniteDist(9999);的声明中使用初始化表达式部分声明构造函数。这是不允许的。声明(通常在.h文件中)应该是:

PriorityQueue(Graph* graph);

定义(通常在.cpp文件中)应为:

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

原因很简单,初始化列表已经是定义的一部分,即该方法的作用,而不仅仅是名称和返回类型的声明。想象一下,你在声明中使用了不同的数字(比如42),在定义中使用了另一个数字(9999),应该使用哪一个?因此不允许。

答案 1 :(得分:1)

更改此

PriorityQueue(Graph*):infiniteDist(9999);

PriorityQueue(Graph*);

答案 2 :(得分:1)

PriorityQueue(Graph*):infiniteDist(9999);错了。

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

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