1

我正在尝试设置一些 .c 文件,以便在它开始变大时更容易找到东西。我将在程序中使用 SDL 调用,因此包含。

这是我的 main.cpp 现在的样子:

#include <stdio.h>
#include <SDL.h>
#include <SDL_gfxPrimitives.h>
#include <SDL_ttf.h>
#include "WriteText.h"

int main(int argc, char *argv[])
{
int i =0;
i = b();

return 0;
}

在我的 WriteText.c 我有:

#include "WriteText.h"

int b(void)
{
return 3;
}

最后是我的 WriteText.h:

#ifndef WRITETEXT_H_INCLUDED
#define WRITETEXT_H_INCLUDED

int b(void);

#endif // WRITETEXT_H_INCLUDED

试图编译它,我得到一个未定义的“b()”引用。我不知道为什么会发生这种情况,我在一些基本的示例代码中进行了练习,一切都很好,但是一旦我将它实际用于实际的事情,我就会遇到这样的错误。

4

3 回答 3

4

问题是您没有将其链接WriteText.c到可执行文件中。如果您提供有关如何创建可执行文件的更多信息,我们可能会提供更好的帮助。

于 2012-11-04T00:27:46.933 回答
0

我发现了我的问题,我的主文件是 .cpp 并使用了 CPP 编译器(因为它是一个 SDL 项目),但是当我添加一个新的 .cpp 文件并复制时,我添加的新文件是 .c 并使用了 C 编译器- 将我的代码粘贴到其中,一切顺利。

(我不确定在 .cpp 文件中编写 C 代码是否是“错误的形式”,但如果我打算使用 SDL,我想这是唯一的方法。)

于 2012-11-04T11:35:55.813 回答
0

您的编译可能没有使用 writetext 目标文件。假设 *nix 和 gcc,你的 makefile 应该看起来像:

all: myprog

myprog: myprog.o writetext.o
    gcc -o $@ $^

myprog.o: myprog.cpp

writetext.o: writetext.cpp
于 2012-11-04T00:31:14.270 回答