Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе / 5 сообщений из 5, страница 1 из 1
06.05.2013, 21:54
    #38249603
-=Ogre=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
Создал новую тему так как в предыдущей теме автор получил ответ и он его устроил.
Проверил код который ему дал некий "Среда разработки" и был несколько озадачен, ибо ни под win7 ни под win 8 этот код у меня в builder не скомпилился, везде ошибка [C++ Fatal Error] Unit1.cpp(27): F1004 Internal compiler error at 0x24ac0ff with base 0x2470000
Быть может кто нить разъяснит почему так, ведь в др средах код автора работает нормально.
Вот исходный код который давали автору предыдущей темы:
Код: plaintext
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.
#include<iostream>

template <class T>
class Mas
{
    //хотя я почему-то помню, что объявленные тут приватны по умолчанию
    Mas();
    
    private: 
    T * item;
    int size;
    public:
    Mas(int array_size,T default_value){size=array_size;item = new T [size]; for (int i=0;i<size;i++) item[i]=default_value;}
    /*не помню в данный момент съест в таком виде деструктор или после нужно описать с явным заданием что тип от шаблона, но это не важно, когда буду у ПК на котором стоит MS VS 2010 проверю */
    ~Mas(){size=0; delete [] item;};
    //Max и должна быть friend методом, но класс 1 и более не предвидится
    
    
    template<class T2> friend T2 Max(Mas<T2> const& m);
};

//вариант согласно вашего алгоритма
template <class T2>
T2 Max(Mas<T2> const& m) {T2 max;for (int i=0;i<m.size;i++) if (max<m.item[i]) max=m.item[i];return max;}

int main() {
    Mas<int> mas(100, 10);
    
    std::cout << Max(mas);
    
    return 0;
}


Вот то, что получилось в модуле у меня, для проверки:
Код: plaintext
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
    #include<iostream>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;


template <class T>
class Mas
{

    Mas();

    private:
    T * item;
    int size;
    public:
    Mas(int array_size,T default_value){size=array_size;item = new T [size]; for (int i=0;i<size;i++) item[i]=default_value;}
    ~Mas(){size=0; delete [] item;};


    template<class T2> friend T2 Max(Mas<T2> const& m);
};

template <class T2>
T2 Max(Mas<T2> const& m) {T2 max;for (int i=0;i<m.size;i++) if (max<m.item[i]) max=m.item[i];return max;}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

    Mas<int> mas(100, 10);
//ТУТ Я COUT ПОМЕНЯЛ НА SHOWMESSAGE
    ShowMessage( Max(mas));

    return 0;
}
//---------------------------------------------------------------------------


П.С. Тема созадана из любопытства и истины для
П.С.2 Понимаю что на борланде мало кто пишет, и видимо именно поэтому люди в прошлом топике мало внимания уделили этому нюансу, а автор мучался=)
...
Рейтинг: 0 / 0
06.05.2013, 22:03
    #38249612
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
-=Ogre=-Быть может кто нить разъяснит почему так, ведь в др средах код автора
работает нормально.
Какое слово из "Internal compiler error" тебе непонятно? Или ты всерьёз надеялся, что
компиляторы пишутся богами и не содержат багов?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.05.2013, 22:09
    #38249617
-=Ogre=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
мне просто любопытно почему вылетает 1 и та же ошибка, вижу варианты:
1) х64 win7(8)
2)особая уличная магия в реализации механизма шаблонов у борландов
3)1 и 2 вместе

Если у кого-то случайно есть х86 WinXP и Borland C++ Builder 6.0 проверьте пожалуйста первый пункт, а то у меня нет ее и поднимать ради этого виртуалку пока нет возможности...=(
...
Рейтинг: 0 / 0
06.05.2013, 22:22
    #38249625
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
-=Ogre=-Если у кого-то случайно есть х86 WinXP и Borland C++ Builder 6.0 проверьте
пожалуйста первый пункт,
Шестого билдера у меня нет:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
templ.cpp:
Warning W8027 templ.cpp 13: Functions containing for are not expanded inline
Error E2247 templ.cpp 21: 'Mas<int>::size' is not accessible in function Max<int>(const 
Mas<int> &)
Error E2247 templ.cpp 21: 'Mas<int>::item' is not accessible in function Max<int>(const 
Mas<int> &)
Error E2247 templ.cpp 21: 'Mas<int>::item' is not accessible in function Max<int>(const 
Mas<int> &)
*** 3 errors in Compile ***


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.05.2013, 23:11
    #38249664
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
У Борланда есть проблемы с друзьями в шаблонах.
https://svn.boost.org/trac/boost/wiki/Guidelines/Borland#inline-friend
Возможно тут вы столкнулись с одной из них.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]