![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Помогите, так как уже вырвал на себе последние волосы. Проблема в шаблоне ниже с перегрузкой оператора вывода (дружественная шаблонная функция). Проверил, вроде бы все правильно. Но: 6 visual компилирует без проблем, в то время как builder 6 и visual 8 не хотят: выдается ошибка трансляции
//--------------------------------------------------------------------------- #include <iostream> using namespace std; //--------------------------------------------------------------------------- const int DefaultSize = 10; //--------------------------------------------------------------------------- template <class T> class Array { private: T* pType; int itsSize; public: // constructors Array(int size = DefaultSize); // параметр по умолчанию Array(const Array & rhs); ~Array() { delete [] pType; } // operators Array & operator = (const Array & theArray); T & operator [] (int offset) { return pType[offset]; } const T & operator [] (int offset) const { return pType[offset]; } // для конструктора копий // access methods int GetSize() const { return itsSize; } friend ostream & operator << (ostream & output, Array<T> & ); // !!!!!!!!!!!!!!!!!!!!!!! }; //--------------------------------------------------------------------------- template <class T> ostream & operator << (ostream & output, Array<T> & theArray); //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { int i, n; Array <int> theArray; n = theArray.GetSize(); for(i = 0; i < n; i++) theArray[i] = i * 2; cout << theArray; cin >> i; return 0; } //--------------------------------------------------------------------------- template <class T> Array<T>::Array(int size) : itsSize(size) { pType = new T[size]; for(int i = 0; i < size; i++) pType[i] = 0; } //--------------------------------------------------------------------------- template <class T> Array<T>::Array(const Array & rhs) { itsSize = rhs.itsSize; pType = new T[itsSize]; for(int i = 0; i < itsSize; i++) pType[i] = rhs[i]; } //--------------------------------------------------------------------------- template <class T> Array<T> & Array<T>::operator = (const Array & theArray) { if(this == &theArray) return *this; itsSize = rhs.itsSize; delete [] pType; pType = new T[itsSize]; for(int i = 0; i < itsSize; i++) pType[i] = theArray[i]; return *this; } //--------------------------------------------------------------------------- template <class T> ostream & operator << (ostream & output, Array<T> & theArray) { for(int i = 0; i < theArray.GetSize(); i++) output << "Array[" << i << "] = " << theArray[i] << endl; return output; } //---------------------------------------------------------------------------
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Спасибо за ответ , так как 2 дня бился на решением.
Еще один вопрос по теме. Ни в одной книге не видел такой конструкции: friend ostream& operator<< <>(ostream&,Array<T>&); я про символ <> после оператора вывода. Где про это посмотреть или для чего это нужно? -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
тоже самое <class T>, просто нет указания типа |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Страуструп (ЯП C++, стр. 931) а для чего нужно - чтобы указать компилятору, что дружественная функция - шаблон -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |