Как исправить (29,20): ошибка CS1519: недопустимый токен '}' в объявлении члена класса, структуры или интерфейса - PullRequest
0 голосов
/ 15 апреля 2019

Я не могу скомпилировать его, независимо от того, что я делаю

Я перепробовал все возможные изменения Помогите мне сделать его компиляцией, для меня код идеален, но все же он не работает

 [System.Serializable]
public class UnderWaterParameters {
    [Header("The following parameters apply for underwater only!")]
    [Space(5)]
    public float fogDensity = 0.1f;
    public Color fogColor;
#if UNITY_POST_PROCESSING_STACK_V1 && AQUAS_PRESENT
    [Space(5)]
    [Header("Post Processing Profiles (Must NOT be empty!)")]
    [Space(5)]
    public PostProcessingProfile underwaterProfile;
    public PostProcessingProfile defaultProfile;
#endif

#if UNITY_POST_PROCESSING_STACK_V2 && AQUAS_PRESENT
    [Space(5)]
    [Header("Post Processing Profiles (Must NOT be empty!)")]
    [Space(5)]
    public PostProcessingProfile underwaterProfile;
    public PostProcessingProfile defaultProfile;
#endif
}

1 Ответ

2 голосов
/ 15 апреля 2019

Attribute (это то, что вы определяете с помощью [...]), дает метаданные о классе или его члене. Другими словами, он не может выдержать все, он всегда должен предшествовать некоторому символу. Вот почему это не компилируется:

#if UNITY_POST_PROCESSING_STACK_V2 && AQUAS_PRESENT
    [Space(5)]
    [Header("Post Processing Profiles (Must NOT be empty!)")]
    [Space(5)] } <-- attribute must preceed a member or class
#endif

Мне кажется, все, что вам нужно, - это разные атрибуты, основанные на том, какое из двух условий применимо, поэтому вы должны переносить только те строки в #if #elif, которые должны отличаться, а не те, которые являются общими .

[System.Serializable]
public class UnderWaterParameters {
    [Header("The following parameters apply for underwater only!")]
    [Space(5)]
    public float fogDensity = 0.1f;
    public Color fogColor;
#if UNITY_POST_PROCESSING_STACK_V1 && AQUAS_PRESENT
    [Space(5)]
    [Header("Post Processing Profiles (Must NOT be empty!)")]
    [Space(5)]
#elif UNITY_POST_PROCESSING_STACK_V2 && AQUAS_PRESENT
    [Space(5)]
    [Header("Post Processing Profiles (Must NOT be empty!)")]
    [Space(5)] }
#endif
    public PostProcessingProfile underwaterProfile;
    public PostProcessingProfile defaultProfile;
}

Конечно, приведенное выше не имеет особого смысла, поскольку в обоих случаях применяются одни и те же атрибуты. Но это кажется другим вопросом для меня.

См. Также документы из MSDN: https://docs.microsoft.com/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-elif

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...