Доброй ночи всем. Такая проблема: уже не раз сталкивался с такой проблемой, что делфи не компилит некоторые строчки, причем совсем непонятно по какой причине, абсолютно рандомно. Раньше решал такую проблему созданием нового проекта и переписыванием его заново, но сейчас у меня большой код, так что такое решение не пойдет. кто знает,в чем причина?
З.Ы. Если такая тема уже поднималась, то прошу меня извинить и перенаправить туда. Всем заранее спасибо.
4 июля 2009 в 18:04
хм..точно
4 июля 2009 в 14:01
А я вам скажу почему. Там, где вторая строчка, помеченная плюсами, используется переменная TempDescriptor. Но после этого она нигде не используется. Соответственно нафиг она нам нужна? Вот оптимизатор ее и выкинул. И, кстати, правильно сделал. За первой строчкой не следил, думаю аналогично
4 июля 2009 в 13:02
рад, что оказался полезным х))
4 июля 2009 в 12:04
яхууу)) заработало) все же оптимизация окакзалась, с директивой {$O-} компилится все. Спасибо за помощь!
4 июля 2009 в 12:01
Я кстати, с таким тоже встречался, но решал проблему переписыванием участка кода и/или перестановкой операторов(при возможности), добавлением мусорного кода. Возможно это танцы с бубном… но все же
4 июля 2009 в 11:05
Пытался прочитать код – паламал глаза…. А не пробовал форматировать код для удобочитаемости?.. Как в такой каше потом разбираццо?..
на самом деле есть форматирование, только вот, когда размещал сюда, все табуляции вначале просто пропали
4 июля 2009 в 11:04
может всё же оптимизация?
поставьте директиву {$O-}
4 июля 2009 в 8:02
Пытался прочитать код – паламал глаза…. А не пробовал форматировать код для удобочитаемости?.. Как в такой каше потом разбираццо?..
4 июля 2009 в 4:03
не ставит синий кружок и при пошаговой отладке пропускает эти строки
4 июля 2009 в 4:02
"но при переписывании заново в новом проекте все снова работало нормально, причем копипастом нельзя было код вставлять, надо было его писать заново."
ну это прям чудеса какие-то…
ЗЫ – а в каком смысле не компилит? Выделяет красным или компилит без них, не ставя напротив пропущенных строчек синий кружок?
4 июля 2009 в 4:00
я не думаю, что они не несут смысловой нагрузки, поскольку они важны для алгоритма + бывало, что в простых программках, набодобие сортировок, не компилились важные строчки, но при переписывании заново в новом проекте все снова работало нормально, причем копипастом нельзя было код вставлять, надо было его писать заново. такое я наблюдал на разных машинах и версиях делфи, так что проблема где-то в ней.
вот фрагмент кода, в котором я сейчас столкнулся с такой проблемой(плюсами помечены не компилируемые строчки):
PContourElement = ^TElement;
PDescriptor = ^TDescriptor;
TElement = record
Point: TPoint;
Next, Previous: PContourElement;
Flag: TEdgeFlag;
Past: boolean;
Dir: TDirection;
InBound: boolean;
SharedFriend: PContourElement;
Region: 1..2;
end;
TDescriptor = record
Angle: real;
NextD, PreviousD: PDescriptor;
CrossVertex: PListPoint;
Index: integer;
Status: TStatus;
end;
procedure TForm1.SetEdgeFlag(var P: PContourElement; C: TContour; Reg: TRegion);
var
i, j, k, m: integer;
inM, havecrosses: boolean;
TekPoint, tekP, MiddleP: PContourElement;
TempDescriptor: PDescriptor;
MiddlePoint: TPoint;
begin
havecrosses := false;
for i := 0 to High(GCP) do
if PointComparison(P^.Point, GCP[i]) or
PointComparison(P^.Previous^.Point, GCP[i]) then begin
HaveCrosses := true;
Break;
end;
if HaveCrosses then begin
for i := 0 to High(Reg) do begin
TekPoint := Reg[i].Head;
for j := 0 to Reg[i].Size do
if PointComparison(P^.Point, TekPoint^.Point) and
PointComparison(P^.Previous^.Point, TekPoint^.Previous^.Point) then begin
P^.Flag := Shared1;
P^.SharedFriend := TekPoint;
Break;
end
else if PointComparison(P^.Point, TekPoint^.Previous^.Point) and
PointComparison(P^.Previous^.Point, TekPoint^.Point) then begin
P^.Flag := Shared2;
P^.SharedFriend := TekPoint;
Break;
end;
TekPoint := TekPoint^.Next; //+++++++++++++++++++
end;
if (P^.Flag <> Shared1) and (P^.Flag <> Shared2) then begin
HaveCrosses := False;
for i := 0 to High(ConnectionList) do begin
TempDescriptor := ConnectionList[i].Head^.InDescriptor;
for j := 0 to 2*ConnectionList[i].Size do
if TempDescriptor^.CrossVertex^.Prev^.Region = Reg[0].Head^.Region then begin
HaveCrosses := True;
Break;
end;
if HaveCrosses then Break;
TempDescriptor := TempDescriptor^.NextD;//++++++++++++++++
end;
if HaveCrosses then begin
MiddlePoint.X := abs((P^.Point.X – P^.Previous^.Point.X) div 2);
MiddlePoint.Y := abs((P^.Point.Y – P^.Previous^.Point.Y) div 2);
for i := 0 to High(Reg) do
if InContour(Reg[i], MiddlePoint) then begin
P^.Flag := InsideEdge;
Break;
end
else P^.Flag := OutSideEdge;
end
else
if P <> C.Head then P^.Flag := P^.Previous^.Flag
else
for i := 0 to High(Reg) do
if InContour(Reg[i], P^.Previous^.Point) then begin
P^.Flag := InsideEdge;
Break;
end
else P^.Flag := OutSideEdge;
end;
end
else
if P <> C.Head then P^.Flag := P^.Previous^.Flag
else
for i := 0 to High(Reg) do
if InContour(Reg[i], P^.Previous^.Point) then begin
P^.Flag := InsideEdge;
Break;
end
else P^.Flag := OutSideEdge;
end;
если понадобится что-нибудь еще, то скину
4 июля 2009 в 3:04
Рендомно ничего не бывает. А ты бы привел эти строчки-то, а точнее целые куски кода. Уверен, что эти строчки выкидываются из-за оптимизации, так как особой смысловой нагрузки не несут