C++ #是否包含.h或.cpp文件?

C++ #是否包含.h或.cpp文件?,c++,C++,所以我有一个看起来很奇怪的问题:当我导入一个单独类的.h文件时,我的非常基本的程序生成了一条错误消息(对'foo::foo(int')的未定义引用)。但是,当我将导入文件更改为.cpp时,一切正常 现在,我读了一些,看过一些视频教程,它们都说相同的:导入.h文件。那它为什么不起作用呢 我在Windows7中使用Code::Blocks编译和运行(没有命令行)。我确实怀疑某些设置不太正确,但是,我确实想确定是否是我的代码失败了 Main.cpp: #include <iostream>

所以我有一个看起来很奇怪的问题:当我导入一个单独类的.h文件时,我的非常基本的程序生成了一条错误消息(对'foo::foo(int')的未定义引用)。但是,当我将导入文件更改为.cpp时,一切正常

现在,我读了一些,看过一些视频教程,它们都说相同的:导入.h文件。那它为什么不起作用呢

我在Windows7中使用Code::Blocks编译和运行(没有命令行)。我确实怀疑某些设置不太正确,但是,我确实想确定是否是我的代码失败了

Main.cpp:

#include <iostream>
#include "Foo.h"  //This don't work. If i include Foo.cpp it does. 

using namespace std;

int main()
{
    Foo k(10);
    cout << k.getInt() << endl;
}
Foo.cpp:

#include "Foo.h"

Foo::Foo(int tall)
: m(tall)
{
    //ctor
}

int Foo::getInt()const
{
    return m;
}

执行链接步骤时,无法编译和/或链接Foo.cpp文件。但是我不熟悉Code::Blocks,所以我无法告诉您如何修复它。

您需要编译main.cpp和foo.cpp,并将两个生成的对象文件链接在一起。

右键单击.cpp文件并转到属性。在build选项卡上,确保选中了compile、link、debug和release


我想代码::块应该可以做到这一点automatically@AlessandroPezzato我只是在谷歌上搜索了Code::Blocks,似乎IDE应该负责所有这些。也许OP创建了一个空项目,所以向导没有创建任何设置。我想这可能是我的错。我创建了一个空白文件(只是为了不获取.h文件),并将其命名为Main.cpp。然后,在编写类之后,我创建了一个新类,它创建了cpp和头文件。这可能就是问题所在。好的,我可以确认这就是问题所在。现在一切都好了。伙计,我真傻…@Martinhas使用Code::Blocks创建了一个项目,将这两个文件添加到项目中,IDE应该负责其余的工作。也许最好拿起一本书,开始熟悉基础知识!1) 程序不会生成错误,编译器会生成错误。2) 这不是编译错误,而是链接器错误。3) 您不“导入”头文件,而是包含它。4) 了解翻译单元、模块化编译和链接。好吧,我意识到我写这篇文章有点太快了。我确实知道是编译器产生了错误,我可以猜到第二点(还不太熟悉链接),第三点只是输入错误——我的第一语言是Java。不过,第四点似乎是个好主意。谢谢。@马丁哈德:关键的区别是java的代码>导入< /COD>确实导入了模块并为你定位所有相关文件,而C++中,你所做的只是字面上包含了文件的内容,这只是一个头文件——你仍然需要自己执行链接。因此,命名法上的差异是非常恰当的。可以很安全地说,从不
\include
.cpp文件。这是什么操作系统?看起来像Debian@Arc676我想是Arch和xfce的关系。Arch有控制台界面吗?Raspberry Pi OS“Raspbian”(Debian版本)将引导到控制台,并需要一个终端命令来激活GUI。我下载了Debian,但它唯一的控制台界面是恢复控制台。Arch有类似的界面吗?
#include "Foo.h"

Foo::Foo(int tall)
: m(tall)
{
    //ctor
}

int Foo::getInt()const
{
    return m;
}