为什么我会收到“函数未在此范围内声明”?

问题描述 投票:0回答:1

当我尝试按照 SDL2 教程用 C 创建图形窗口时,出现了此问题。 我按照教程中创建了标头、源 .c 和 main,但是当我使用 make 运行它时,仅创建了源文件的 .o,当我转到 main 时,它说这些函数不是已宣布。

错误是 siguiente:

PS C:\Juego> make
g++ -c -I src/include -L src/lib -o main draw.c -o draw.o
g++ -c -I src/include -L src/lib -o main init.c -o init.o
g++ -c -I src/include -L src/lib -o main input.c -o input.o
g++ -c -I src/include -L src/lib -o main main.c -o main.o
main.c: En la función 'int SDL_main(int, char**)':
main.c:12:9: error: 'initSDL' no fue declarado en este ámbito        
   12 | initSDL();
      | ^~~~~~~
main.c:18:17: error: 'prepareScene' no fue declarado en este ámbito  
   18 | prepareScene();
      | ^~~~~~~~~~~~
main.c:20:17: error: 'doInput' no fue declarado en este ámbito       
   20 | doInput();
      | ^~~~~~~
main.c:22:17: error: 'presentScene' no fue declarado en este ámbito  
   22 | presentScene();
      | ^~~~~~~~~~~~
make: *** [makefile:18: main.o] Error 1

makefile 是:


# Compiler and flags
CC = g++
CFLAGS = -I src/include -L src/lib -o main

# Source files and object files
SRC = draw.c init.c input.c main.c
OBJ = $(SRC:.c=.o)

# Libraries to link
LIBS = -lmingw32 -lSDL2main -lSDL2

# Build the executable
main: $(OBJ)
    $(CC) $(CFLAGS) $(OBJ) $(LIBS)

# Compile source files to object files
%.o: %.c
    $(CC) -c $(CFLAGS) $< -o $@

# Clean up
clean:
    rm -f $(OBJ) main

和main.c


#include "structs.h"
#include"SDL2\SDL.h"

#define main SDL_main



int main(int argc, char *argv[])
{
    memset(&app, 0, sizeof(App));

    initSDL();

    atexit(cleanup);

    while (1)
    {
        prepareScene();

        doInput();

        presentScene();

        SDL_Delay(16);
    }

    return 0;
}

我尝试单独编译这些文件,但没有成功。只是改变我编写 makefile 的方式也不起作用。

c makefile sdl
1个回答
0
投票

main
调用的函数的声明必须存在于包含
main
定义的源文件中,直接或通过
#include
指令间接进行。

如果头文件(通常是名为

name.h
的文件)中有这些函数的声明,则在
#include name.h
中插入
main.c
形式的指令以包含这些指令。如果头文件中没有这些函数的声明,则要么在
main.c
中写入声明,要么将它们放入头文件中并包含它们。

© www.soinside.com 2019 - 2024. All rights reserved.