我在下面的标题中遇到了构造函数签名的问题。编译器给我的信息是:
错误:预期')'在'*'标记之前
有人可以告诉我这里可能缺少什么吗?
#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)
{
...
}
答案 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是最好的解决方案。