powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
5 сообщений из 5, страница 1 из 1
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
    #38249603
Фотография -=Ogre=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал новую тему так как в предыдущей теме автор получил ответ и он его устроил.
Проверил код который ему дал некий "Среда разработки" и был несколько озадачен, ибо ни под 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
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
    #38249612
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Ogre=-Быть может кто нить разъяснит почему так, ведь в др средах код автора
работает нормально.
Какое слово из "Internal compiler error" тебе непонятно? Или ты всерьёз надеялся, что
компиляторы пишутся богами и не содержат багов?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
    #38249617
Фотография -=Ogre=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне просто любопытно почему вылетает 1 и та же ошибка, вижу варианты:
1) х64 win7(8)
2)особая уличная магия в реализации механизма шаблонов у борландов
3)1 и 2 вместе

Если у кого-то случайно есть х86 WinXP и Borland C++ Builder 6.0 проверьте пожалуйста первый пункт, а то у меня нет ее и поднимать ради этого виртуалку пока нет возможности...=(
...
Рейтинг: 0 / 0
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
    #38249625
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=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
Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
    #38249664
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Борланда есть проблемы с друзьями в шаблонах.
https://svn.boost.org/trac/boost/wiki/Guidelines/Borland#inline-friend
Возможно тут вы столкнулись с одной из них.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка Borland C++ Builder 6.0 при работе с friendly функциями в шаблонном классе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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