2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: Хто нагадил в память
Сообщение11.10.2009, 22:08 
Circiter в сообщении #251012 писал(а):
Видите, проблема в том, что прототип оператора private.

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

 
 
 
 Re: Хто нагадил в память
Сообщение11.10.2009, 23:02 
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 
2venco
Цитата:
Там многоточие, в котором, скорее всего, public есть.

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

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

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

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

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

 
 
 [ Сообщений: 18 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group