1

我有两个文件:

hello.h 和 hello.cpp

你好.h

#ifndef __HELLO_H__
#define __HELLO_H__

using namespace std;

void PrintMessage();

#endif

你好.cpp

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

using namespace std;

void PrintMessage()
{
     cout << "I want to be displayed!";
}

现在,我想PrintMessage()在新的 .cpp 文件中使用,但我不断收到错误消息。这就是我正在做的事情:

打印信息.cpp

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

using namespace std;

int main()
{
     PrintMessage();
     return 0;
}

我只是在做一些公然错误的事情吗?我确实将它们全部放在同一个文件夹中;我认为它与 Dev-C++(我用来编写/编译/运行的东西)有关,但我无法弄清楚。有人有想法么?


我在桌面上创建了一个文件夹,将所有三个文件都放入其中,然后我尝试printingmessage.cpp完全按原样编译我的文件。这是我得到的错误:

[Linker error] Undefined reference to 'PrintMessage()' 
4

2 回答 2

0

我认为它与 Dev-C++(我用来编写/编译/运行的东西)有关,但我无法弄清楚。

我想也是。在幕后,必须发生以下事情:

  1. 两个文件都被编译*.obj这将为每个文件创建一个*.cpp文件,并使用标题。
  2. 目标文件相互链接,并且可能与所需的库链接。

您的问题在于第二步的“彼此”部分:代码编译正常,但链接失败。头文件在这一点上是无关紧要的。更准确地说,链接器调用printingmessage.obj包含对未在该目标文件或任何默认库中定义的函数的引用。问题很可能是由于*.cpp文件不是同一项目的一部分。您需要创建一个多源文件项目,您可以在其中链接多个目标文件。你如何使用 Dev-C++ 做到这一点可能在他们的手册中。

于 2012-09-09T00:54:03.857 回答
0

我不知道开发 C++,但我强烈建议您是否进行任何认真的编码来学习/移动到终端并使用 make 文件,或更新的 IDE,例如 Visual Studio。

这是一个简短的脚本,您可以运行将其另存为 bash.sh 之类的东西

g++ hello.cpp -O2 -g -c 
g++ hello.o printmessage.cpp -Wall -O2 -o print

然后用 ./print 运行它

于 2012-09-08T22:29:59.360 回答