Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
AndrSlav
65 / 53 / 14
Регистрация: 20.12.2013
Сообщений: 429
#1

переход с 32 бит на 64 бит

13.12.2016, 09:37. Просмотров 279. Ответов 7
Метки нет (Все метки)

Здравствуйте. Пробую на builder 10 перевести проект с 32 на 64 бит. Возникают странные ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
template <typename T> class DOT
{
 friend SIMULATION;
 private:
 T mas[3];    //Координаты точки пересечения
 DOT* pNext;   //Указатель на следующий элемент, если надо, т.е. если формируется связный список
 DOT* pPrev;   //Указатель на предыдущий элемент, если надо, т.е. если формируется связный список
 size_t ind;      //Индекс элемента в массиве - 'внешняя' характеристика связного списка для связи с массивом
 public:
 
 DOT();
 DOT(T x1, T x2, T x3);
 DOT(const DOT& dts);
 DOT(const T vaL);
 ~DOT();
 
 DOT& operator=(const DOT& dts);
 DOT& operator=(const T vaL);
 DOT& operator+=(const DOT& dts);
 DOT& operator+=(const T vaL);
 DOT& operator-=(const DOT& dts);
 DOT& operator-=(const T vaL);
 T operator*=(const DOT& dts);  //Скалярное произведение
 DOT& operator*=(const T vaL);
 DOT& operator/=(const T vaL);
 
 T& operator[](size_t n){if(n<0 || n>2) throw; else return mas[n];};
 DOT operator+(const DOT& dts);
 DOT operator+(const T vaL);
 friend DOT operator+<T>(const T vaL, const DOT& dts);
 DOT operator-(const DOT& dts);
 DOT operator-(const T vaL);
 friend DOT operator-<T>(const T vaL, const DOT& dts);
 DOT operator*(const T vaL);
 T operator*(const DOT& dts);   //Скалярное произведение
 friend DOT operator*<T>(const T vaL, const DOT& dts);
};
Ругается на строчки с friend - [bcc64 Error] my_templates.h(58): friends can only be classes or functions.
Ошибка [bcc64 Error] my_templates.h(58): expected ';' at end of declaration list вылезает, судя по всему, в связи с предыдущей.
На 32 бит таких проблем не было - не понимаю куда смотреть, то ли вообще наведенная ошибка. Но кроме этих ошибок и предупреждений ничего больше нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2016, 09:37
Ответы с готовыми решениями:

Бит 8, младший и старший бит (по книге)
Добрый день. Вот читаю книгу, и не пойму элементарной на первый взгляд вещи. ...

Инверсия бит
Добрый день. Есть unsigned short int x; Нужно инверсировать все биты в x,...

Старший бит
Допустим число 4 представляю в двоичной системе счисления получается 0100. В...

Бит реверс
Вводится число в десятичной системе надо записать его в двоичной и перевернуть....

Integer 160 бит
В stdint.h есть uint8_t, uint16_t, uint32_t и uint64_t, а мне нужно сделать...

7
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,042
13.12.2016, 09:44 #2
Цитата Сообщение от AndrSlav Посмотреть сообщение
SIMULATION
Что это?
0
AndrSlav
65 / 53 / 14
Регистрация: 20.12.2013
Сообщений: 429
13.12.2016, 09:50  [ТС] #3
Цитата Сообщение от nd2 Посмотреть сообщение
Что это?
Извиняюсь, это класс, на эту строчку не ругается, не надо было мне ее приводить. Ругается на строчки 30, 33, 36 и, похоже, надо писать
C++
1
friend DOT<T> operator+(const T vaL, const DOT& dts);
По крайней мере, в этом случае здесь ошибки не возникают, но вылезают новые(
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4424 / 2395 / 664
Регистрация: 18.10.2014
Сообщений: 4,050
13.12.2016, 09:53 #4
Цитата Сообщение от AndrSlav Посмотреть сообщение
Возникают странные ошибки:
Скорее странно, что их раньше не возникало. Этот friend SIMULATION; выглядит совершенно бессмысленно. Надежда лишь на то, что SIMULATION - это какой-то макрос, который потерялся при переходе.
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,042
13.12.2016, 09:53 #5
Цитата Сообщение от AndrSlav Посмотреть сообщение
это класс, на эту строчку не ругается
Странно, что не ругается. Специфика builder? По builder вопросы лучше там задавать: http://www.cyberforum.ru/cpp-builder/
0
AndrSlav
65 / 53 / 14
Регистрация: 20.12.2013
Сообщений: 429
13.12.2016, 09:58  [ТС] #6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Скорее странно, что их раньше не возникало.
Это да, бесит, что только сменил 32 на 64 бит, а сразу лезет что-то непонятное, сейчас вдруг istringstream перестал видеть вообще.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
выглядит совершенно бессмысленно
согласен, это, скорее, затычка, поскольку пишу уже несколько лет с большими перерывами, и пока нет времени переписывать заново, увы (Последний раз вообще в апреле смотрел - многое уже забыл).
0
_programmer_
0 / 0 / 2
Регистрация: 13.12.2016
Сообщений: 3
13.12.2016, 10:05 #7
Дружественными могут быть только классы или функции. Что здель делает SIMULATION действительно не совсем понятно.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4424 / 2395 / 664
Регистрация: 18.10.2014
Сообщений: 4,050
13.12.2016, 10:14 #8
Цитата Сообщение от AndrSlav Посмотреть сообщение
C++
1
2
3
DOT operator+(const DOT& dts);
DOT operator+(const T vaL);
friend DOT operator+<T>(const T vaL, const DOT& dts);
Проблема в том, что после того, как вы объявили внутренние методы operator +, неквалифицированное имя operator + будет теперь ссылаться именно на них. То есть вы пытаетесь использовать имя operator + как имя шаблона, в то время как оно уже объявлено ранее как нешаблонное. Отсюда и ошибка, хотя сообщение от компилятора, конечно, весьма туманное.

Перенесите friend declaration для внешнего шаблонного operator + выше объявления обычных внутренних нешаблонных operator + и проблема пропадет.

C++
1
2
3
4
5
6
7
8
template <typename T> class DOT
{
  ...
  friend DOT operator+<T>(const T vaL, const DOT& dts);
  DOT operator+(const DOT& dts);
  DOT operator+(const T vaL);
  ...
};
Именно в таком порядке.


-------------

Альтернативный вариант - раннее объявление шаблона еще перед классом, а затем использование квалифицированного имени ::operator+ в объявлении друга

C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T> class DOT;
template <typename T> DOT<T> operator+(const T vaL, const DOT<T>& dts);
 
template <typename T> class DOT
{
  ...
  DOT operator+(const DOT& dts);
  DOT operator+(const T vaL);
  friend DOT (::operator+<T>)(const T vaL, const DOT& dts);
  ...
};
или

C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T> class DOT;
template <typename T> DOT<T> operator+(const T vaL, const DOT<T>& dts);
 
template <typename T> class DOT
{
  ...
  DOT operator+(const DOT& dts);
  DOT operator+(const T vaL);
  friend auto ::operator+<T>(const T vaL, const DOT& dts) -> DOT;
  ...
};
2
13.12.2016, 10:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 10:14

Конвертация из бит в байты
есть битовый массив bitset, заполненый определённым образом. есть char* bytes...

Подсчет количества бит
Здравствуйте! У меня есть функция, которая считает количество бит в 32-х...

Первый бит числа
Пишу программу для сжатия файлов по алгоритму RLE. Чтобы программа понимала,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru