我在新对象的实例中遇到各种错误。这是我第一次用c ++编程,所以我不知道什么,但我真的不知道我想念的是什么。以下是我的代码和相关错误的一些示例。
Edge newEdge;
newEdge = new Edge(vertex2, neighbors(vertex1)); // create a new edge without weight
错误上升是:
invalid conversion from `Edge*' to `int'
initializing argument 1 of `Edge::Edge(int, Edge*, unsigned int)'
,构造函数是
public: Edge(int nextVertex = 0, Edge* ptr = NULL, unsigned int weight = 1):nextVertex(nextVertex),
next(ptr),
weight(weight){};
与其他课程相似:
PriorityQueue queue = new PriorityQueue();
错误:
conversion from `PriorityQueue*' to non-scalar type `PriorityQueue' requested
代码:
VertexPriority aux;
错误:
no matching function for call to `VertexPriority::VertexPriority()'
和最后一次
ShortestPath shortp = new ShortestPath(graph);
错误:
conversion from `ShortestPath*' to non-scalar type `ShortestPath' requested
还有一个错误,我认为我与那些有争议的错误有关,因为它是一个实例而且错误类似,这里是代码:
queue.insert(new VertexPriority(vertex1, 0));
,错误是:
no matching function for call to `PriorityQueue::insert(VertexPriority*)'
candidates are: void PriorityQueue::insert(VertexPriority)
对象的构造函数是
VertexPriority(int vertex, unsigned int priority):vertex(vertex),
priority(priority){};
并且方法insert为参数采用顶点:void insert(VertexPriority vertex);
我的代码中缺少什么?
答案 0 :(得分:2)
C ++不是Java,在创建普通的非指针对象时不使用new
。
所以它只是
newEdge = Edge(vertex2, neighbors(vertex1));
这会导致调用复制赋值运算符,因此如果对象中存在任何复杂数据,则最好使用一个。参见例如the rule of three