函数声明符后的预期函数主体 [英] Expected function body after function declarator

查看:455
本文介绍了函数声明符后的预期函数主体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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 4,SDK 4.3和Unity 3.3 基本SDK设置为4.3,Unity中的SDK版本设置为4.2,目标iOS设置为3.2

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

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

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

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

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

   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];
}

推荐答案

好吧,事实证明问题本质上在于Unity 3.3.但是,通过进入iOS的播放器设置并将tagrt SDK的值从"4.2"重新调整为"4.2以来的最新值",可以轻松解决此问题.

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"

这篇关于函数声明符后的预期函数主体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆