我的问题是我的基本情况永远不会执行,因为循环是运行应用程序的主要组件,不会执行。我正在考虑制作一个嵌入式for循环,但是,我想不出让for循环从最大矢量位置振荡到最小矢量位置的方法。另外,在查看之前要注意的一件小事是v3包含对象A和B,因为对象C是A和B的超类。
MCVE版本:http://coliru.stacked-crooked.com/a/c6fdc017118e98f2
void Obj::objhelper()
{
recurisivehelper();
if ((v1[0].getx() == 0 && v2[0].getx() > 0) ||
(v1[0].getx() > 0 && v2[0].getx() == 0))
{
if (v1[0].getx() == 0 && v2[0].getx() > 0)
{
print(3);
return;
}else
{
print(4);
return;
}
}
else if(v1[0].getx() > 0 && v2[0].getx() > 0)
{
objhelper();
}
return;
}
//This method is not touched
//This is a recursive helper method of the helper method of the main method
void Obj::recursivehelper()
{
for (int i = 0; i < 2; i++) {
if (v3[i].gety() == "str1" ||
v3[i].gety() == "str2" ||
v3[i].gety() == "str3")
{
int temp = 0;
Obj1 obj(v1,:v2);
obj.display();
v3[i].doa(v3[i + 1]);
obj.display();
v2[0]--;
}else if (v3[i].gety() == "str4" ||
v3[i].gety() == "str5" ||
v3[i].gety() == "str6" )
{
Obj1 obj(v1,sv2);
obj.display();
v3[i].doa(v3[i + 1]);
obj.display();
v1[0]--;
}
}
return;
}
答案 0 :(得分:0)
传递参数by value与passing by reference不同。
这是有问题的部分: -
void recursivehelper(std::vector<int>v1, std::vector<int>v2, std::vector<std::string>v3) {
....
v1[0]--; //<-- modify internal copy
v2[0]--;
...
return;
}
v1[0]--;v2[0]--;
行修改v1
和v2
的复制,实际上不会影响v1
或v2
调用者(recursivefunc()
)的观点。
使其按预期工作的一种简单方法是通过引用传递。
从
更改声明和实现的签名void recursivefunc(std::vector<int>, std::vector<int>, std::vector<std::string>);
void recursivehelper(std::vector<int>, std::vector<int>, std::vector<std::string>);
到
void recursivefunc(std::vector<int>&, std::vector<int>&, std::vector<std::string>&);
void recursivehelper(std::vector<int>&, std::vector<int>&, std::vector<std::string>&);
这是demo。