处理标题和源文件的最佳方法

问题描述

我总是这样安排我的C ++头文件和源文件:

prog.h

#include <iostream>
class Prog
{
    public:
        Prog(std::string);
        ~Prog();
        
        void printName();
        
    private:
        std::string name;
};

#include "prog.cpp"

prog.cpp

Prog::Prog(std::string n):
    name(n)
{
    std::cout << "Program \"" << name << "\" started.\n";
}

Prog::~Prog()
{
    std::cout << "Program \"" << name << "\" ended.\n";
}

void Prog::printName()
{
    std::cout << "Program name is: \"" << name << "\".\n";
}

main.cpp

#include "prog.h"

int main()
{
    Prog prog {"MyCalculator"};
    
    prog.printName();
    
    return 0;
}

但是我最近发现以其他方式安排它们很常见:

prog.h

class Prog
{
    public:
        Prog(std::string);
        ~Prog();
        
        void printName();
        
    private:
        std::string name;
};

prog.cpp

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

Prog::Prog(std::string n):
    name(n)
{
    std::cout << "Program \"" << name << "\" started.\n";
}

Prog::~Prog()
{
    std::cout << "Program \"" << name << "\" ended.\n";
}

void Prog::printName()
{
    std::cout << "Program name is: \"" << name << "\".\n";
}

main.cpp

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

int main()
{
    Prog prog {"MyCalculator"};
    
    prog.printName();
    
    return 0;
}

我发现第一种方法更方便,所以有什么理由比第二种方法更喜欢第二种方法?

解决方法

头文件不应包含源代码。

  • 我认为第一种方法可能会在足够复杂的项目中引发依赖项错误(例如,使用循环依赖项),因为不要将声明和定义分开。
  • 在第二个中,编译时间更快,因为您可以分别编译每个源文件。

另外,您可能find this question有用。

,

第一个版本是“ Accelerated C ++”(2000年版)这本书首次引入类声明的头文件时建议做的事情。

我认为第二个版本看起来更优雅,因为它在程序开始时将所有#include个预编译器语句组合在一起。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...