【问题标题】:Terminal won't run the newly compiled file, always running the previously compiled file终端不会运行新编译的文件,总是运行之前编译的文件
【发布时间】:2021-04-24 03:34:34
【问题描述】:

编辑:问题是由于书中的错误,因为它现在有点旧了。

我正在用 C++ 编写一个简单的程序,当我重新编译我的代码时,终端会运行我编译文件的先前版本。我的源代码的名称是 exercise.cpp。这是我重构之前的源代码:

#include "std_lib_facilities.h"

int main()
{
    cout << "Please enter your first name and age\n";
    string first_name;
    int age;
    cin >> first_name;
    cin >> age;
    cout << "Hello, " << first_name << " (age " << age << ")\n";
}

这里是稍微重构的版本:

#include "std_lib_facilities.h"

int main()
{
    cout<<"Please enter your first name and age:\n";
    string first_name = "???";
    int age = -1;
    cin>>first_name>>age;
    cout<<"Hello, "<<first_name<<" (age "<<age<<")\n";
}

当我编译重构文件并在终端中运行 ./exercise 时,它会给出第一个源代码的输出。例如,如果您运行第一个编译文件并且在第一个源代码中输入“22 Mark”,则输出为“Hello, 22 (age 0)”。 (或者不是 0 内存中的任何垃圾值)。如果您运行新编译的文件并且您的输入相同,我希望输出为“Hello, 22 (age -1)”,因为我已经在重构代码中初始化了我的变量。但是,输出仍然是“Hello, 22 (age 0)”。这是什么原因造成的,我该如何解决?

附言。我使用 Visual Studio Code 作为编辑器,使用 GNU 编译器作为编译器。

【问题讨论】:

  • 查看可执行文件上的时间戳。验证是否构建了新代码。也许禁用您的防病毒软件。简而言之,您可能需要在获得帮助之前调试情况,以便您可以回答导致此问题的原因。还要检查构建输出中的错误消息。也许您之前的可执行文件仍在运行,因此构建失败。
  • 我检查了时间戳并验证了新代码已经构建。我的两个构建输出中也没有收到任何错误消息。任务构建成功。 @drescherjm
  • 作为双重检查,在输入之前添加std::cout &lt;&lt; "Compiled " &lt;&lt; __DATE__ &lt;&lt; " " &lt;&lt; __TIME__ &lt;&lt; std::endl; 以验证运行二进制文件中的目标文件实际编译的日期和时间。
  • 我检查了它,它编译没有任何问题。我还通过更改第一个输出来检查它,并且每次编译时它都会更改。唯一的问题是年龄变量在给定非整数值时不会输出 -1。我仍然不知道背后的原因。 @JohnD

标签: c++ terminal compilation


【解决方案1】:

尝试包含指令而不是 std_lib_facilities.h,因为它可能会导致错误,如附加链接中接受的答案中所述: "std_lib_facilities.h" showing error

【讨论】:

  • 问题是,编译和运行程序没有出错。一切都很顺利,只是由于某种原因我无法运行最后一个可执行文件。它继续运行上一个。
  • 您希望输出为 -1,但是如果您想打印 -1,则要求用户输入 age 的值,然后从 cin 语句中删除 age。
猜你喜欢
  • 2012-06-29
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多