Russian Qt Forum
Ноябрь 24, 2024, 00:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перестановка мест...))  (Прочитано 4141 раз)
0...-5
Гость
« : Февраль 13, 2011, 14:00 »

Объясните, почему сборка выражения 'y = -c * x' выдает ошибку 'collect2 ld returned 1 exit status', если 'c' объявлена в классе с модификаторами static const, тогда как с выражением 'y = -x * c' таких проблем нет...
Записан
Fat-Zer
Гость
« Ответ #1 : Февраль 13, 2011, 14:09 »

хоть написали бы каких типов переменные... и что принимает/возвращает operator* и унарный operator- для них
Записан
brankovic
Гость
« Ответ #2 : Февраль 13, 2011, 14:12 »

Такое бывает, когда компилятор пытается сделать ссылку на static const переменную. По сути это глюк, можно обойти через int tmp = c и дальше юзать tmp.

Просто интересно, какой компилятор? В gcc вроде это давно пофиксили..
Записан
0...-5
Гость
« Ответ #3 : Февраль 13, 2011, 14:23 »

хоть написали бы каких типов переменные... и что принимает/возвращает operator* и унарный operator- для них

float, операторы не перегружались
Записан
0...-5
Гость
« Ответ #4 : Февраль 13, 2011, 14:24 »

Такое бывает, когда компилятор пытается сделать ссылку на static const переменную. По сути это глюк, можно обойти через int tmp = c и дальше юзать tmp.

Просто интересно, какой компилятор? В gcc вроде это давно пофиксили..

Именно gcc...Если это глюк, то весьма неприятный(((
Записан
BRE
Гость
« Ответ #5 : Февраль 13, 2011, 14:26 »

Именно gcc...Если это глюк, то весьма неприятный(((
Вижу ошибку линковки... Вопрос: а статический член класса правильно описан?
Записан
0...-5
Гость
« Ответ #6 : Февраль 13, 2011, 14:40 »

Цитировать
Вижу ошибку линковки... Вопрос: а статический член класса правильно описан?

static const float c = 0.1
А собственно, где тут можно ошибиться?
Записан
Fat-Zer
Гость
« Ответ #7 : Февраль 13, 2011, 14:44 »

static const float c = 0.1
А собственно, где тут можно ошибиться?

Если так в хедере написано, то можно... не уверен но вроде надо так:
Код
C++ (Qt)
// в хедере:
class A
{
 static const float c;
}
 
// в cpp:
const float A::c=0.1;
 
могу ошибаться...
Записан
brankovic
Гость
« Ответ #8 : Февраль 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;}
Записан
0...-5
Гость
« Ответ #9 : Февраль 13, 2011, 16:10 »

Хм...но ведь 'y = -x * c' не вызывает ошибки, т.е. дело в применении отрицания к статическому члену класса...С интами, честно говоря, не пробовал, но использование статической функции смахивает на костыли Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.351 секунд. Запросов: 21.