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

Предыдущая тема Следующая тема Перейти вниз

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

Сообщение  Саня в Чт Фев 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.", то всё становится нормально. Пмойму это не должно быть так... как вы думаете?
avatar
Саня

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

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

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

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

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

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

MOHCTP

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

Посмотреть профиль

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

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

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

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

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

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

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

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

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

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

Namespace Token
Type Type_

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

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

Посмотреть профиль

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

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
он вполне компилится и исполняется..
и перечисления тоже можно перемещать в пространства имен.. и да, это не Си.. покрайней мере я не помню такого же в нем..
avatar
Саня

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

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

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

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
avatar
VerhoLom

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

Посмотреть профиль

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

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

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

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

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

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

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

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

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

Сообщение  Спонсируемый контент


Спонсируемый контент


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

Предыдущая тема Следующая тема Вернуться к началу

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

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