Название: Перестановка мест...)) Отправлено: 0...-5 от Февраль 13, 2011, 14:00 Объясните, почему сборка выражения 'y = -c * x' выдает ошибку 'collect2 ld returned 1 exit status', если 'c' объявлена в классе с модификаторами static const, тогда как с выражением 'y = -x * c' таких проблем нет...
Название: Re: Перестановка мест...)) Отправлено: Fat-Zer от Февраль 13, 2011, 14:09 хоть написали бы каких типов переменные... и что принимает/возвращает operator* и унарный operator- для них
Название: Re: Перестановка мест...)) Отправлено: brankovic от Февраль 13, 2011, 14:12 Такое бывает, когда компилятор пытается сделать ссылку на static const переменную. По сути это глюк, можно обойти через int tmp = c и дальше юзать tmp.
Просто интересно, какой компилятор? В gcc вроде это давно пофиксили.. Название: Re: Перестановка мест...)) Отправлено: 0...-5 от Февраль 13, 2011, 14:23 хоть написали бы каких типов переменные... и что принимает/возвращает operator* и унарный operator- для них float, операторы не перегружались Название: Re: Перестановка мест...)) Отправлено: 0...-5 от Февраль 13, 2011, 14:24 Такое бывает, когда компилятор пытается сделать ссылку на static const переменную. По сути это глюк, можно обойти через int tmp = c и дальше юзать tmp. Просто интересно, какой компилятор? В gcc вроде это давно пофиксили.. Именно gcc...Если это глюк, то весьма неприятный((( Название: Re: Перестановка мест...)) Отправлено: BRE от Февраль 13, 2011, 14:26 Именно gcc...Если это глюк, то весьма неприятный((( Вижу ошибку линковки... Вопрос: а статический член класса правильно описан? Название: Re: Перестановка мест...)) Отправлено: 0...-5 от Февраль 13, 2011, 14:40 Цитировать Вижу ошибку линковки... Вопрос: а статический член класса правильно описан? static const float c = 0.1 А собственно, где тут можно ошибиться? Название: Re: Перестановка мест...)) Отправлено: Fat-Zer от Февраль 13, 2011, 14:44 static const float c = 0.1 А собственно, где тут можно ошибиться? Если так в хедере написано, то можно... не уверен но вроде надо так: Код могу ошибаться... Название: Re: Перестановка мест...)) Отправлено: brankovic от Февраль 13, 2011, 14:54 static const float c = 0.1 А собственно, где тут можно ошибиться? Вообще-то по стандарту запрещено флоаты определять как static const члены c присвоением в классе, это расширение gcc. Лучше так делать: struct A {static float const f;}; float const A::f = 0.1; Другое дело такой глюк и с интами бывает. Общий work-around состоит в замене static float const c = 0.1; на static float c () {return 0.1;} Название: Re: Перестановка мест...)) Отправлено: 0...-5 от Февраль 13, 2011, 16:10 Хм...но ведь 'y = -x * c' не вызывает ошибки, т.е. дело в применении отрицания к статическому члену класса...С интами, честно говоря, не пробовал, но использование статической функции смахивает на костыли ;D
|