在C ++中使探查器从方法获取不正确的输出

时间:2019-04-16 19:47:37

标签: c++

我已经在一个探查器项目上工作了几个星期。我的项目大部分都已完成,但其中一种方法产生了一个输出错误。

我认为这可能与放置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

对于代码混乱或含糊不清,我感到很抱歉,试图弄清楚它一直感到沮丧。如果需要,我可以提供更多背景信息。感谢您的关注。

0 个答案:

没有答案