【问题标题】:Separating a class into cpp and header file (C++)将类分离为 cpp 和头文件 (C++)
【发布时间】:2017-10-10 04:06:46
【问题描述】:

我是 C++ 语言的新手。 所以我被分配将一个现有文件拆分成三个源代码:swap.h、swap.cpp 和 source3.cpp

现有文件:

#include <iostream>

void get_numbers (int&, int&);
void swap_values (int&, int&);
void show_results (int, int);

int main () {
   int first_num, second_num;

   get_numbers (first_num, second_num);
   swap_values (first_num, second_num);
   show_results (first_num, second_num);
   return 0;
}

void get_numbers (int& input1, int& input2) {
   using namespace std;
   cout << "Enter two integers: ";
   cin >> input1 >> input2;
}

void swap_values (int& variable1, int& variable2) {
   int temp;
   temp = variable1;
   variable1 = variable2;
   variable2 = temp;
}

void show_results (int output1, int output2) {
   using namespace std;
   cout << "In reverse order the numbers are: "
        << output1 << " " << output2 << endl;
}
  1. swap.h 包含函数原型

  2. swap.cpp 包含函数实现

  3. source3.cpp 包含主函数

对于swap.h:

#pragma once
#ifndef swap_h
#define swap_h

void get_numbers(int&, int&);
void swap_values(int&, int&);
void show_results(int, int);
#endif

对于swap.cpp

    #include <iostream>

    void get_numbers(int& input1, int& input2) {
       using namespace std;
       cout << "Enter two integers: ";
       cin >> input1 >> input2;
    }

    void swap_values(int& variable1, int& variable2) {
        int temp;
        temp = variable1;
        variable1 = variable2;
        variable2 = temp;
    }

    void show_results(int output1, int output2) {
       using namespace std;
       cout << "In reverse order the numbers are: "
       << output1 << " " << output2 << endl;
    }

对于 source3.cpp:

    #include "stdafx.h"
    #include "swap.h"
    int main()
    {
       int first_num, second_num;

       get_numbers(first_num, second_num);
       swap_values(first_num, second_num);
       show_results(first_num, second_num);
       return 0;
    }

当我调试程序时,它说:“无法启动程序'C:\用户......' 该系统找不到指定的文件。我做错了什么?

【问题讨论】:

  • 哪个文件?发布该路径的结尾部分..
  • 这将很难重现。它为我编译,必须删除 Visual Studio-isms,因为我目前无法访问 MSVC,并且似乎以我期望的方式运行和运行。编辑您的问题并粘贴到输出窗口的内容中。也许有人会看到一些不寻常的东西并提供有用的建议。

标签: c++ visual-c++


【解决方案1】:

由于您的代码编译成功,但无法启动,您的调试环境可能有问题。

此外,一旦拥有#pragma once,您就不需要#ifdef#define#endif

【讨论】:

    【解决方案2】:

    如果您提供的是整个代码,则您没有在swap.cpp 中包含swap.h。因此,您有函数的定义,但没有声明。尽管我会在这里想象另一个错误或至少是一个警告。尝试解决这个问题。

    如果不起作用,请尝试构建发布版本。它编译吗?它开始了吗?当它开始时,它有什么作用吗?如果我之前提到的是问题,我希望程序运行到最后,什么都不做。

    如果问题出在主文件中的swap.h,请确保它位于同一位置,或者包含路径指向包含它的目录。 stdafx.h 也是如此

    另外,您不需要#pragma once#ifndef #define#endif。摆脱其中任何一个,我建议使用 #ifndef #define#endif,因为并非所有地方都支持 #pragma once。但对你来说应该没关系。

    【讨论】:

    • swap.cpp 中的任何内容都不需要 swap.h 中的任何内容,因此不会产生错误或警告。所有 swap.h 都在宣传 swap.cpp 中可访问的功能。
    • 是的,谢谢澄清,但我预计会出现类似“没有函数定义”之类的警告,而不是在 swap.cpp 中,而是在 source3.cpp 中。不知道这样的事情是否存在。然而,如果没有 swap.cpp 中的 swap.h 或 source3.cpp 中的 swapp.cpp(不应该这样做),代码将什么也不做。
    猜你喜欢
    • 2021-04-03
    • 1970-01-01
    • 2021-09-15
    • 2017-06-29
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多