我正在尝试设置一些.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()'引用。我不知道为什么会发生这种情况,我在一些基本的示例代码中实践它,并且每个工作都很好,但是当我实际使用它时,我遇到了这样的错误。
答案 0 :(得分:4)
问题是您没有将WriteText.c
链接到可执行文件中。如果您提供了有关如何创建可执行文件的更多信息,我们可能会提供更好的帮助。
答案 1 :(得分:0)
有可能你的编译没有使用writetext对象文件。假设* nix和gcc,你的makefile应该类似于:
all: myprog
myprog: myprog.o writetext.o
gcc -o $@ $^
myprog.o: myprog.cpp
writetext.o: writetext.cpp
答案 2 :(得分:0)
我想出了我的问题,我的主文件是.cpp并使用了CPP编译器(因为它是一个SDL项目),但我添加的新文件是.c并使用了C编译器,当我添加了一个新的.cpp文件只需将我的代码复制粘贴到其中,一切顺利。
(我不确定在.cpp文件中编写C代码是不是“坏形式”,但如果我打算使用SDL,我想这是唯一的方法。)