C ++编译不同的.cpp文件,包括在头文件中

时间:2019-06-14 13:42:31

标签: c++

正如我在标题中所说,我想知道将.cpp文件分别包含在它们的.h中是否是错误

我正在Windows上使用cygwin进行编译。 g ++编译器已使用apt-cyg install g++安装在cygwin中。
然后我将cygwin路径添加到env中,现在可以从Windows cmd访问g ++命令。

这是重现该问题的基本示例。

main.cpp

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

int main(int argc, char const *argv[])
{
    tezt();
    return 0;
}

tezt.h

#ifndef TEZT_H
#define TEZT_H

void tezt();

#endif

tezt.cpp

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

void tezt() 
{
    std::cout<<"tezt"<<std::endl;
}

如果我仅使用g++ main.cpp进行编译,则会出错。
因此,为了正确编译,我应该输入g++ main.cpp tezt.cpp或定义库。
当使用存储在不同文件夹中的多个.cpp文件进行管理时,这可能是一项艰巨的任务。


所以我正在提议这种方法:
如果我修改tezt.h的内容,例如跟随,则编译成功!这可能是一个很好的“解决方法”,或者不建议这样做?这是一个巨大的愚蠢吗?

#ifndef TEZT_H
#define TEZT_H
#include "tezt.cpp"

void tezt();

#endif

感谢您的关注。

2 个答案:

答案 0 :(得分:2)

通常在头文件中有一个实现是一个坏主意。 如果您在同一项目的不同文件中包含tezt.h文件,则可能会出现multiple definitions for the same symbol的编译错误。

答案 1 :(得分:-1)

包含* .cpp的作品。

但是真正的解决方案是使用工具make。

创建一个定义依赖项的makefile,然后调用make,然后适当地调用编译器。