创建新Object时的转换错误

时间:2013-11-02 19:28:45

标签: c++ pointers compiler-errors instance

我在新对象的实例中遇到各种错误。这是我第一次用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);

我的代码中缺少什么?

1 个答案:

答案 0 :(得分:2)

C ++不是Java,在创建普通的非指针对象时不使用new

所以它只是

newEdge = Edge(vertex2, neighbors(vertex1));

这会导致调用复制赋值运算符,因此如果对象中存在任何复杂数据,则最好使用一个。参见例如the rule of three