FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

ошибка типа в пространстве имен и вне его

Участников: 3

Перейти вниз

ошибка типа в пространстве имен и вне его Empty ошибка типа в пространстве имен и вне его

Сообщение  Саня Чт Фев 03, 2011 2:32 pm

Почему-то в коде ниже компилятор выдает ошибки

..\..\FbTemp.bas(7) error 110: Expected period ('.') in 'Type Type_'
..\..\FbTemp.bas(Cool error 18: Syntax error, found 'Dim' in 'Dim _id As UInteger'
Код:

Enum Type_
   _INTEGER
    '   ...
End Enum

Namespace Token
      Type Type_
      Dim _id As UInteger

      Union
         Dim _type As Any Ptr
         Dim _width As UInteger
      End Union
   End Type
End Namespace
Судя по всему компилер считает, что должно следовать значение типа Type_, а не идентификатр, что есть очень странно.. Если изменить имя одного из этих типов или поставить перед типом в namespace-е "Token.", то всё становится нормально. Пмойму это не должно быть так... как вы думаете?
Саня
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 30
Откуда : Екатеринбург

http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

ошибка типа в пространстве имен и вне его Empty Re: ошибка типа в пространстве имен и вне его

Сообщение  MOHCTP Пн Фев 07, 2011 4:55 pm

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

MOHCTP

Сообщения : 17
Дата регистрации : 2011-02-07

Вернуться к началу Перейти вниз

ошибка типа в пространстве имен и вне его Empty Re: ошибка типа в пространстве имен и вне его

Сообщение  Саня Пн Фев 07, 2011 5:22 pm

директивы начинаются с двух подчеркиваний, а не с одного. но он реально немного свихнут, т.к. призамене перечисления на тип все становится нормально. другое дело что при объявлении типа в подпространстве компилер считает, что там начинается елемент перечисления. Об этом свидетельствует "error 110", а 18-ая - это уже как следственная ошибка. Кстати если поменять их местами то есть enum и пространство имен, то все проходит нормально.
Помойму, это ошибка компилера, возможно, что в частности лексера. Т.к. в ошибке сказано, что ожидается период, значит, начинается разбор проги как для значения перечисления Type_ из-за того, что лексер скорее всего пострел в таблице имен и получил результат что Type_ это тип, хотя надо было для идентификатора. Парсер посмотрел что это типо перечисление, начал считывать для значение перисления и ждать точку, но её не последовало, поэтому выдал такое сообщение..
В общем-то я переделал свой код и избавился от этого, так что темку можно закрывать...
Саня
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 30
Откуда : Екатеринбург

http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

ошибка типа в пространстве имен и вне его Empty Re: ошибка типа в пространстве имен и вне его

Сообщение  VerhoLom Вт Фев 08, 2011 1:39 pm

Саня пишет:
Enum Type_
_INTEGER
' ...
End Enum

Namespace Token
Type Type_

Выделенное жирным - это что такое? Может "Dim As Type_ Type"? Это не Си... Question А может и описание перечисления в пространство поместить? Мало ли... pig
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

Вернуться к началу Перейти вниз

ошибка типа в пространстве имен и вне его Empty Re: ошибка типа в пространстве имен и вне его

Сообщение  Саня Вт Фев 08, 2011 2:09 pm

это объявление типа.. в подпространстве имен Token, это точно и это позволяется... посмотрите в мане на NameSpace, а особенно в примере, вот в пример из мана:

Код:

Namespace Forms
    Type Point '' A 2D point
        As Integer x
        As Integer y
    End Type
    '' Since we are inside of the namespace, Point resolves to Forms.Point.
    Sub AdjustPoint( ByRef pt As Point, ByVal newx As Integer, ByVal newy As Integer )
        pt.x = newx
        pt.y = newy
    End Sub
End Namespace

Type Point '' A 3D point
    As Integer x
    As Integer y
    As Integer z
End Type

Sub AdjustPoint( ByRef pt As Point, ByVal newx As Integer, ByVal newy As Integer, ByVal newz As Integer )
    pt.x = newx
    pt.y = newy
    pt.z = newz
End Sub

Dim pt1 As Point
AdjustPoint( pt1, 1, 1, 1 )
Dim pt2 As Forms.Point
Forms.AdjustPoint( pt2, 1, 1 )
sleep
он вполне компилится и исполняется..
и перечисления тоже можно перемещать в пространства имен.. и да, это не Си.. покрайней мере я не помню такого же в нем..
Саня
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 30
Откуда : Екатеринбург

http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

ошибка типа в пространстве имен и вне его Empty Re: ошибка типа в пространстве имен и вне его

Сообщение  VerhoLom Пт Фев 11, 2011 2:21 pm

Саня пишет:

..\..\FbTemp.bas(7) error 110: Expected period ('.') in 'Type Type_'
..\..\FbTemp.bas(Cool error 18: Syntax error, found 'Dim' in 'Dim _id As UInteger'

А выделенная сттрока ни на что не наталкивает? Пишет, что Dim лишний... Сабака! Suspect
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

Вернуться к началу Перейти вниз

ошибка типа в пространстве имен и вне его Empty Re: ошибка типа в пространстве имен и вне его

Сообщение  Саня Пт Фев 11, 2011 8:27 pm

Блин, чел...это вторая в списке ошибка, поэтому она может показываться, как результат неправильного распознавания после первой ошибки. То есть, если первой ошибки не будет, то и последующей( второй ) тоже не будет, точнее компилер будет уже правильно распознавать дальнейший текст проги..эт раз.
Если блок Enum убрать или переставить после Token, то все компилится поэтому вторая ошибка, ошибкой не будет( по крайней мере синтаксической или будет, но будет отдельной от первой ошибки ), эт два. Поэтому надо смотреть не на вторую ошибку, выдаваемую компилом, а на первую.. а там сказано..

..\..\FbTemp.bas(7) error 110: Expected period ('.') in 'Type Type_'
В сообщении сказано, что оидается точка и ещё какой-нибудь идентификатор.. Type_ - это enum, значит за точкой должен быть одна из констант, обьявленых в блоке Enum. Ни точки ни константы нет, зато есть Dim. Он не подходит и в данной ситуации не ожидается, поэтому выдается такая ошибка..
Саня
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 30
Откуда : Екатеринбург

http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения