【问题标题】:Classes in separate files单独文件中的类
【发布时间】:2018-09-11 18:15:24
【问题描述】:

我正在尝试使用 CodeBlocks 中单独文件中的类,但遇到了以下问题。

我有 3 个文件:main.cppclasa.hclasa.cpp

clasa.h

#pragma once

class clasa
{
public:
    clasa();
};

clasa.cpp

#include "clasa.h"
#include <iostream>
using namespace std;

clasa::clasa()
{
    cout<<"hi";
}

main.cpp

#include <iostream>
#include "clasa.h"

using namespace std;

int main()
{
    clasa obj;
    return 0;
}

当我将这 3 个文件包含到 项目 中时,输出为 hi

当我将它们包含到项目中时,main.cpp 就不会构建。但是,如果我用"clasa.cpp" 替换"clasa.h",它会再次起作用。

为什么它不工作?

【问题讨论】:

  • 当你包含所有代码时它会编译。当您遗漏一些内容时,它不会编译。到底是什么问题?!
  • 这个问题似乎介于链接器做什么#include做什么之间。如所问,“为什么{省略源代码}不起作用?”在我看来,这不是一个格式正确的问题。
  • 投票以“过于宽泛”而关闭。没有解释什么是理解的,什么是不理解的,这个问题要求一个相当大的关于编写、编译和链接 C++ 基础的教程。

标签: c++ file class header codeblocks


【解决方案1】:

TL;DR - 看起来您没有在构建的可执行文件中编译头文件 (*.h)。

当您单击运行按钮时,计算机会做两件事。首先,它编译代码并生成可执行文件。然后它运行可执行文件。 首先编译器是如何工作的? 它读取 *.cpp,当遇到“#include”时,它会替换指定文件中的代码行。编译器处理完#include "clasa.h" 行后,main.cpp 文件将如下所示:

#include <iostream>
#pragma once
class clasa
{
public:
    clasa();
};

using namespace std;

int main()
{
    clasa obj;
    return 0;
}

它也一样。 当您从项目中删除 *.h 文件时,编译器不会将代码包含在可执行文件中。 它与 *.cpp 变体一起工作的原因是因为编译器不包含 *.cpp 文件。它们作为运行中的程序访问。 希望这对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2012-03-11
    • 1970-01-01
    • 2018-07-23
    • 2017-08-04
    相关资源
    最近更新 更多