【发布时间】:2013-08-19 19:36:51
【问题描述】:
我用 Java 编写了一个名为 Nod.java 的类。
import java.util.ArrayList;
import java.util.Arrays;
class Nod {
int[] vol;
String op="";
Nod parent;
int adancime;
Nod (int[] vol, String op,Nod parent,int adancime){
this.vol=vol;
this.op=op;
this.parent = parent;
this.adancime=adancime;
}
public String toString() {
return op;
}
public int getAdancime() {
return adancime;
}
public ArrayList<Nod> getCale(ArrayList<Nod> lnoduri) {
lnoduri.add(0, this);
if (parent != null) lnoduri = parent.getCale(lnoduri);
return lnoduri;
}
public ArrayList<Nod> getCale()
{ return(getCale(new ArrayList<Nod>())); }
}
我想用 C++ 重写它,但我不知道如何用 C++ 重写这两个函数:
public ArrayList<Nod> getPath(ArrayList<Nod> lnoduri) {
lnoduri.add(0, this);
if (parent != null) lnoduri = parent.getPath(lnoduri);
return lnoduri;
}
public ArrayList<Nod> getPath(){
return(getPath(new ArrayList<Nod>()));
}
这些函数存储每个点头到父节点的路径。
你能帮帮我吗?
编辑
因为是相关问题,所以在这里补充一下。
我在 Java 中为“Vase”类编写了一个函数:
public ArrayList<Nod> succesori(Nod parent) {
// "Nod" is another class.
ArrayList<Nod> listTest = new ArrayList<Nod>();
// operations/conditions;
listTest.add(new Nod(vol,op,parent,adancime+1));
return(listTest);
}
我想用 C++ 重写:
vector<Nod*> Vase::succesori(Nod *parinte)
{
vector<Nod*> *listTest = new vector<Nod*>();
// operations/conditions;
listTest.insert(new Nod(vol,op,parent,adancime+1));
return (*listTest);
}
但是当我尝试执行此命令时出现错误: listTest.insert(new Nod(vol,op,parent,adancime+1));
IntelliSense:表达式必须具有类类型
错误 1 错误 C2228:'.insert' 左侧必须有类/结构/联合
如何在 listTest 中添加/插入新的 Nod 类?
【问题讨论】:
-
将Java编写的东西转换成C++的最好方法是重新设计整个东西;两种语言的语义和习语差别太大了。例如,这个类是否有任何子类?是否有任何子类覆盖
getPath? -
在已经回答的问题中添加另一个问题是个坏主意。不过,您将指针与非指针混合在一起。代码应如下所示:
vector<Nod*> Vase::successor(Nod* parent) { vector<Nod*> listTest; listTest.insert(new Nod(...)); return listTest; } -
抱歉……下次我会开一个新问题。我写了你所说的,我得到另一个错误:“错误 1 错误 C2661:'std::vector<_ty>::insert':没有重载函数需要 1 个参数”和“IntelliSense:没有重载函数实例”std:: vector<_ty _ax>::insert [with _Ty=Nod *, _Ax=std::allocator
]”匹配参数列表”和“IntelliSense:函数调用中的参数太少”。该插入有问题... -
我使用“push_back”而不是“insert”,它现在正在工作。感谢您的回答!