我正在尝试在c ++中创建一个2d整数的A *搜索(我对c ++很新,但我已经在Java中完成了一次)问题是当我试图将项目推入队列时由于类型冲突而抛出编译错误。
我的Node.h定义为:
class Node{
private:
int xCoord;
int yCoord;
int value;
Node* parent;
public:
Node();
Node(int x, int y, int value);
void setParent(Node* parent);
int getX();
int getY();
int getValue();
Node* getParent();
bool operator()(Node& node1, Node& node2);
};
struct NodeCompare {
bool operator()(Node& node1, Node& node2) const
{
int node1value = node1.getValue();
int node2value = node2.getValue();
return node1value < node2value;
}
};
Node.cpp:
#include <stdlib.h>
#include "Node.h"
Node::Node(){
this->xCoord = -1;
this->yCoord = -1;
this->value = -1;
this->parent = NULL;
}
Node::Node(int _x, int _y, int _value){
this->xCoord = _x;
this->yCoord = _y;
this->value = _value;
this->parent = NULL;
}
void Node::setParent(Node* par){
this->parent = par;
}
int Node::getX(){
return xCoord;
}
int Node::getY(){
return yCoord;
}
int Node::getValue(){
return value;
}
Node* Node::getParent(){
return parent;
}
bool Node :: operator()(Node&amp; node1,Node&amp; node2){
return node1.value > node2.value;
}
和我的主要:
#include <iostream>
#include <ostream>
#include <vector>
#include <queue>
#include "Node.h"
int main(){
using namespace std;
priority_queue<Node, vector<Node>, NodeCompare> openList;
Node* node = new Node(1,2,19);
openList.push(node);
cout << "node is: x " << node->getX() << " y " << node->getY() << " value "
<< node->getValue() << endl;
return 0;
}
编译器说:
error: no matching function for call to ‘std::priority_queue<Node, std::vector<Node>, NodeCompare>::push(Node*&)’
这与我想要推送到列表的Node的类型有关(所以我相信)我尝试将我的代码更改为以下内容:
Node node = new Node(1,2,19);
给出错误:
error: conversion from ‘Node*’ to non-scalar type ‘Node’ requested
我试过传递我知道的所有变化:
openList.push(&node);
和
openList.push(*node);
但是他们也会抛出编译错误。
有人可以解释我做错了吗?
干杯, 克里斯。
答案 0 :(得分:1)
new
返回指向对象的指针
实际的对象。您可以像这样更改main
,而不是处理Node
对象
指向堆上Node
的指针:
int main(){
using namespace std;
priority_queue<Node, vector<Node>, NodeCompare> openList;
Node node = Node(1,2,19);
openList.push(node);
cout << "node is: x " << node.getX() << " y " << node.getY() << " value "
<< node.getValue() << endl;
return 0;
}
答案 1 :(得分:1)
您正在尝试将节点指针添加到节点对象列表中。我建议的是openList.push(*node);
。