xcode 函数声明符后的预期函数体

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5606854/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 20:46:10  来源:igfitidea点击:

Expected function body after function declarator

objective-cxcodeiosunity3d

提问by Zophiel

Trying to compile a unity3d project in xcode but i'm getting the following compile errors on the function below. Anybody know what the cause is?

试图在 xcode 中编译一个 unity3d 项目,但我在下面的函数中遇到以下编译错误。有谁知道是什么原因?

Using Xcode 4, SDK 4.3 and Unity 3.3 Base SDK is set to 4.3, SDK version in Unity is set to 4.2 and target iOS to 3.2

使用 Xcode 4,SDK 4.3 和 Unity 3.3 Base SDK 设置为 4.3,Unity 中的 SDK 版本设置为 4.2,目标 iOS 为 3.2

AppController.mm:710: error: expected initializer before '.' token

AppController.mm: error: Parse Issue: Expected function body after function declarator

AppController.mm:710: 错误:'.' 之前的预期初始值设定项 令牌

AppController.mm:错误:解析问题:函数声明符后的预期函数体

   void PresentContext_UnityCallback(struct UnityFrameStats const* unityFrameStats)
    {   
    #if ENABLE_INTERNAL_PROFILER
        _unityFrameStats = *unityFrameStats;

        if (_frameId % BLOCK_ON_GPU_EACH_NTH_FRAME == (BLOCK_ON_GPU_EACH_NTH_FRAME-1))
        {
            Prof_Int64 gpuTime0 = mach_absolute_time();

    #if ENABLE_BLOCK_ON_GPU_PROFILER
            UnityFinishRendering();
    #endif

            Prof_Int64 gpuTime1 = mach_absolute_time();
            _gpuDelta = gpuTime1 - gpuTime0;
        }
        else
            _gpuDelta = 0;
    #endif


    #if ENABLE_INTERNAL_PROFILER
        Prof_Int64 swapTime0 = mach_absolute_time();
    #endif

        PresentSurface(_surface);

    #if ENABLE_INTERNAL_PROFILER
        Prof_Int64 vblankTime = mach_absolute_time();

        if (_lastVBlankTime < 0) _lastVBlankTime = vblankTime;
        _frameDelta = vblankTime - _lastVBlankTime; _lastVBlankTime = vblankTime;

        Prof_Int64 swapTime1 = vblankTime;
        _swapDelta = swapTime1 - swapTime0;
    #endif
    }

The code prior to the above function is as follows:

上述函数之前的代码如下:

void PresentSurface(MyEAGLSurface& surface)
{
    UNITY_DBG_LOG ("PresentSurface:\n");
    EAGLContext *oldContext = [EAGLContext currentContext];

    if (oldContext != _context)
        [EAGLContext setCurrentContext:_context];

#if GL_APPLE_framebuffer_multisample
    if (surface.msaaSamples > 0 && _supportsMSAA)
    {
        UnityStartProfilerCounter(msaaResolveCounter);
        #if ENABLE_INTERNAL_PROFILER
        Prof_Int64 msaaTime0 = mach_absolute_time();
        #endif

        UNITY_DBG_LOG ("  ResolveMSAA: samples=%i msaaFBO=%i destFBO=%i\n", surface.msaaSamples, surface.msaaFramebuffer, surface.framebuffer);
        glBindFramebufferOES(GL_READ_FRAMEBUFFER_APPLE, surface.msaaFramebuffer); 
        glBindFramebufferOES(GL_DRAW_FRAMEBUFFER_APPLE, surface.framebuffer);

        glResolveMultisampleFramebufferAPPLE();
        CHECK_GL_ERROR();

        #if ENABLE_INTERNAL_PROFILER
        _msaaResolve += (mach_absolute_time() - msaaTime0);
        #endif
        UnityEndProfilerCounter(msaaResolveCounter);
    }
#endif

#if GL_EXT_discard_framebuffer
    if (_supportsDiscard)
    {
        GLenum attachments[3];
        int discardCount = 0;
        if (surface.msaaSamples > 1 && _supportsMSAA)
            attachments[discardCount++] = GL_COLOR_ATTACHMENT0_OES;

        if (surface.depthFormat)
            attachments[discardCount++] = GL_DEPTH_ATTACHMENT_OES;

        attachments[discardCount++] = GL_STENCIL_ATTACHMENT_OES;

        GLenum target = (surface.msaaSamples > 1 && _supportsMSAA)? GL_READ_FRAMEBUFFER_APPLE: GL_FRAMEBUFFER_OES;
        if (discardCount > 0)
            glDiscardFramebufferEXT(target, discardCount, attachments);
    }
#endif

    CHECK_GL_ERROR();

    // presentRenderbuffer presents currently bound RB, so make sure we have the correct one bound
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, surface.renderbuffer);   
    if(![_context presentRenderbuffer:GL_RENDERBUFFER_OES])
        EAGL_ERROR("swap renderbuffer");

#if GL_APPLE_framebuffer_multisample
    if (_supportsMSAA)
    {
        const int desiredMSAASamples = UnityGetDesiredMSAASampleCount(MSAA_DEFAULT_SAMPLE_COUNT);   
        if (surface.msaaSamples != desiredMSAASamples)
        {
            surface.msaaSamples = desiredMSAASamples;
            CreateSurfaceMultisampleBuffers(&surface);
            glBindRenderbufferOES(GL_RENDERBUFFER_OES, surface.renderbuffer);
        }

        if (surface.msaaSamples > 1)
        {
            glBindFramebufferOES(GL_FRAMEBUFFER_OES, surface.msaaFramebuffer);
            gDefaultFBO = surface.msaaFramebuffer;
            UNITY_DBG_LOG ("  glBindFramebufferOES (GL_FRAMEBUFFER_OES, %i); // PresentSurface\n", surface.msaaFramebuffer);
        }
    }
#endif

    if(oldContext != _context)
        [EAGLContext setCurrentContext:oldContext];
}

采纳答案by Zophiel

Oke turns out the problem lies inherently within Unity 3.3. How ever, this is easilly fixed by going into the player settings for iOS and readjusting the value for the tagrt SDK from "4.2" to "latest since 4.2"

好吧,原来问题出在 Unity 3.3 中。但是,通过进入 iOS 的播放器设置并将 tagrt SDK 的值从“4.2”重新调整为“自 4.2 以来的最新版本”,可以轻松解决此问题

回答by Ondrej Rafaj

I just deleted the & that was in front of the variable ... Now I can buld

我刚刚删除了变量前面的 & ......现在我可以 buld

回答by kunalg

Add following two lines to my Prefix.pch

将以下两行添加到我的 Prefix.pch

#define __IPHONE_OS_VERSION_MAX_ALLOWED   __IPHONE_4_2
#define __IPHONE_OS_VERSION_MIN_REQUIRED  __IPHONE_3_0