我已经在一个探查器项目上工作了几个星期。我的项目大部分都已完成,但其中一种方法产生了一个输出错误。
我认为这可能与放置if(it == child.end())语句有关。我尝试过移动它,但仍然无法获得所需的结果。
// Adds in the report to the main.
// Assumes only one return at end of main body.
void AST::mainReport(std::vector<std::string>& profileName) {
std::list<AST*>::iterator it = child.begin();
while (it != child.end()) {
if ((*it)->tag == "function") {
AST *newPtr = (*it)->getChild("block");
std::list<AST*>::iterator itr = newPtr->child.begin();
if (it == child.end()) {
while ((*itr)->tag != "return") {
++itr;
}
}
--itr;
AST *output = new AST(token);
std::string out;
for (std::vector<std::string>::iterator i = profileName.begin(); i != profileName.end(); ++i) {
out = out + ("std::cout<< " + *i + " <<std::endl; \n");
}
output->text = out;
newPtr->child.insert(itr, output);
}
++it;
}
}
该方法应该在主函数所示的返回值之前插入2个cout
语句:
int main() {
int i;
i = 0;
while (i < 10) {
++i;
std::cout << i;
}
std::cout << foo_cpp << std::endl; // Here
std::cout << main_cpp << std::endl; // Here
return 0;
}
相反,我的方法是在main离开其作用域之后插入cout
语句,从而导致错误:
int main() {
int i;
i = 0;
while (i < 10) {
++i;
std::cout << i;
}
return 0;
} std::cout << foo_cpp << std::endl; // Here
std::cout << main_cpp << std::endl; // Here
对于代码混乱或含糊不清,我感到很抱歉,试图弄清楚它一直感到沮丧。如果需要,我可以提供更多背景信息。感谢您的关注。