2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Хто нагадил в память
Сообщение11.10.2009, 22:08 
Заслуженный участник


09/08/09
3438
С.Петербург
Circiter в сообщении #251012 писал(а):
Видите, проблема в том, что прототип оператора private.

А как я могу это видеть? Там три точечки в начале объявления класса стоят; я ж не знаю, что вместо них в реальном коде написано :)
Я охотно допускаю, что Вы правы, и мне надо следовало сразу спросить у автора, что значит "не работает". Я сам-то не проверял, если честно :)

 Профиль  
                  
 
 Re: Хто нагадил в память
Сообщение11.10.2009, 23:02 
Заслуженный участник


04/05/09
4587
Circiter в сообщении #251012 писал(а):
2Maslov
Цитата:
А какой пример?

Я имел ввиду это:
Nerazumovskiy в сообщении #250924 писал(а):
Код:
class BigInt
{...
inline BigInt operator-(const BigInt &b) const;
....
};
BigInt BigInt::operator-(const BigInt &b)const
{
.....
}

Видите, проблема в том, что прототип оператора private. Если его перенести в public (да хоть, например, как я уже предлагал, сменив class на struct), то все зафурычит (т.е. можно будет вычитать объекты этого класса везде, где только этот класс виден).
Там многоточие, в котором, скорее всего, public есть.
В таком виде, всё в одном файле, работать будет, т.к. определение функции тоже есть. Если же положить определение в отдельный файл, как и есть, насколько я понял, у автора, то работать может перестать (зависит от других факторов).

 Профиль  
                  
 
 Re: Хто нагадил в память
Сообщение12.10.2009, 04:24 
Заслуженный участник


26/07/09
1559
Алматы
2venco
Цитата:
Там многоточие, в котором, скорее всего, public есть.

Наверняка. Ух уж эти многоточия. :)

Цитата:
Если же положить определение в отдельный файл, как и есть, насколько я понял, у автора, то работать может перестать

А, вы имеется ввиду, что не будет работать если объявление класса положить в первый файл, реализацию во второй, проверочный код в третий (подключив к нему первый как заголовок)? Ну да, разумеется не будет работать. Компилятор на самом деле все скомпилирует, правда наверняка выбросив warning типа inline function used but never defined. А вот компоновщик уже такое собрать не сможет... Вы правы (хотя warning'а может и не быть если слово inline перенесено из объявления в определение; линкер же все равно должен буркнуть undefined reference).

Как и говорил Maslov, реализации (определения) inline-функций должны быть видны отовсюду (т.е. они должны быть целиком доступны самому компилятору).

Тогда можно посоветовать Nerazumovskiy вообще не делить объявление и реализацию перегруженного оператора (i.e. писать код прямо в объявлении класса), это позволит сэкономить на ключевом слове inline. :)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group