Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能够包括cpp。。。。但不是头球?发生什么事了? 我觉得我误解了C++中的一个大概念。 (买不到书。) 我在这上面找不到任何其他东西,很抱歉,如果在互联网的一个模糊部分出现了隐藏的东西。 我最近一直在尝试使用SDL,发现了一种为SDL创建应用程序包装器的新方法。但当将其分离为单独的cpp和头文件时。。。事情发生了_C++_File_Include_Undefined - Fatal编程技术网

能够包括cpp。。。。但不是头球?发生什么事了? 我觉得我误解了C++中的一个大概念。 (买不到书。) 我在这上面找不到任何其他东西,很抱歉,如果在互联网的一个模糊部分出现了隐藏的东西。 我最近一直在尝试使用SDL,发现了一种为SDL创建应用程序包装器的新方法。但当将其分离为单独的cpp和头文件时。。。事情发生了

能够包括cpp。。。。但不是头球?发生什么事了? 我觉得我误解了C++中的一个大概念。 (买不到书。) 我在这上面找不到任何其他东西,很抱歉,如果在互联网的一个模糊部分出现了隐藏的东西。 我最近一直在尝试使用SDL,发现了一种为SDL创建应用程序包装器的新方法。但当将其分离为单独的cpp和头文件时。。。事情发生了,c++,file,include,undefined,C++,File,Include,Undefined,C++: 有人知道这里发生了什么吗?那么我应该怎么做呢?您可能知道,包括cpp文件不是正确的做法,即使它似乎可以解决这个问题 当您忘记将源文件添加到compile命令时,就会出现类似您的错误 我从未使用过xcode,但通过快速的谷歌搜索结果表明: 检查缺少哪些符号 目标->构建阶段->编译源代码 如果未列出缺少的源文件,请添加它们 命令+b再次编译源代码 正如您可能知道的,包含cpp文件不是正确的做法,即使它似乎可以解决这个问题 当您忘记将源文件添加到compile命令时,就会出现类似您的错误

C++:


有人知道这里发生了什么吗?那么我应该怎么做呢?

您可能知道,包括cpp文件不是正确的做法,即使它似乎可以解决这个问题

当您忘记将源文件添加到compile命令时,就会出现类似您的错误

我从未使用过xcode,但通过快速的谷歌搜索结果表明:

  • 检查缺少哪些符号
  • 目标->构建阶段->编译源代码
  • 如果未列出缺少的源文件,请添加它们
  • 命令+b再次编译源代码

  • 正如您可能知道的,包含cpp文件不是正确的做法,即使它似乎可以解决这个问题

    当您忘记将源文件添加到compile命令时,就会出现类似您的错误

    我从未使用过xcode,但通过快速的谷歌搜索结果表明:

  • 检查缺少哪些符号
  • 目标->构建阶段->编译源代码
  • 如果未列出缺少的源文件,请添加它们
  • 命令+b再次编译源代码

  • 好吧,结果证明它解决了问题。但为什么将cpp包括在内是一个可行的办法?这是一个链接问题吗?这是一个链接问题。如果您不编译源文件,那么调用者就没有链接的对象。包含文件与在包含该文件的文件中写入包含文件的内容相同。所以包含的源文件确实被编译了。只是不在它自己的编译单元中,而是在包含它的编译单元中。好的,事实证明它修复了它。但为什么将cpp包括在内是一个可行的办法?这是一个链接问题吗?这是一个链接问题。如果您不编译源文件,那么调用者就没有链接的对象。包含文件与在包含该文件的文件中写入包含文件的内容相同。所以包含的源文件确实被编译了。只是不在它自己的编译单元中,而是在包含它的编译单元中。
    //
    //  AppSdl.cpp
    //  sdlgaim
    //
    //  Created by Home on 28/4/14.
    //  Copyright (c) 2014 hyperum. All rights reserved.
    //
    
    #include "AppSdl.h"
    
    app_sdl::app_sdl() :
    _running(false)
    {
    }
    
    app_sdl::~app_sdl()
    {
        destroy();
    }
    
    int app_sdl::init(int width, int height, const char *title)
    {
        // Initialize the SDL library.
        if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
        {
            fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError());
            return APP_FAILED;
        }
    
        win = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_SHOWN);
        renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    
        // Success.
        return APP_OK;
    }
    
    void app_sdl::destroy()
    {
        if (win)
        {
            SDL_DestroyWindow(win);
            SDL_DestroyRenderer(renderer);
            SDL_Quit();
        }
    }
    
    int app_sdl::run(int width, int height, const char *title)
    {
        // Initialize application.
        int state = init(width, height, title);
        if (state != APP_OK) return state;
    
        // Enter to the SDL event loop.
        SDL_Event ev;
        _running = true;
    
        while (SDL_WaitEvent(&ev))
        {
            onEvent(&ev);
            Render();
    
            if (_running == false)
            {
                break;
            }
        }
    
        // Success.
        return APP_OK;
    }
    
    void app_sdl::onEvent(SDL_Event* ev)
    {
        switch (ev->type)
        {
            case SDL_QUIT:
                _running = false;
                break;
    
            case SDL_KEYDOWN:
            {
    
                switch (ev->key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        _running = false;
                        break;
                }
            }
        }
    }
    
    void app_sdl::Render()
    {
        SDL_Rect r;
        int w,h;
        SDL_GetWindowSize(win, &w, &h);
    
        r.w = 200;
        r.h = 200;
        r.x = w/2-(r.w/2);
        r.y = h/2-(r.h/2);
    
    
        //
        SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0, 0xff);
        SDL_RenderClear(renderer);
    
        SDL_SetRenderDrawColor(renderer, 0xff, 0xff, 0, 0xff);
        SDL_RenderFillRect(renderer, &r);
        SDL_RenderPresent(renderer);
    }
    
    //
    //  AppSdl.h
    //  sdlgaim
    //
    //  Created by Home on 28/4/14.
    //  Copyright (c) 2014 hyperum. All rights reserved.
    //
    
    #ifndef __sdlgaim__AppSdl__
    #define __sdlgaim__AppSdl__
    
    #include <iostream>
    #include <SDL2/SDL.h>
    struct app_sdl
    {
    
        app_sdl();
        ~app_sdl();
    
    
    
        // Application state (just convenience instead of 0, 1, ...).
    
    
        enum APP_STATE
        {
            APP_OK = 0,
            APP_FAILED = 1
        };
    
        // Destroy application, called by destructor, don't call manually.
        void destroy();
    
        int init(int width, int height, const char *title);
    
        // Run application, called by your code.
        int run(int width, int height, const char *title);
    
        // Called to process SDL event.
        void onEvent(SDL_Event* ev);
    
        // Called to render content into buffer.
        void Render();
    
        // Whether the application is in event loop.
        bool _running;
        SDL_Window *win;
        SDL_Renderer *renderer;
    };
    
    
    #endif /* defined(__sdlgaim__AppSdl__) */
    
    Undefined symbols for architecture x86_64:
      "app_sdl::run(int, int, char const*)", referenced from:
          _main in main.o
      "app_sdl::app_sdl()", referenced from:
          _main in main.o
      "app_sdl::~app_sdl()", referenced from:
          _main in main.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)