Шаблонный класс и Clang компилятор = ошибки
От: amsdev  
Дата: 13.08.19 11:19
Оценка:
Приветствую !

Имеется класс, который без проблем собирается классическим 32 битным компилятором и не собирается новым Clang (bcc32c):

template <typename T>
class TBasicMultiList : public TBasicJSONObject {
public:
    virtual void __fastcall                  AddItem(T *Item){DataList->Add(Item);}
    virtual void __fastcall             InsertItem(T *Item, int Index){DataList->Insert(Index,Item);}
    virtual T*   __fastcall                GetAndDeleteLastItem();
    virtual T*   __fastcall                   GetAndDeleteFirstItem();
    virtual void __fastcall                  DeleteItem(int Index);
    virtual void __fastcall                 Clear();
    virtual void __fastcall             Assign(TBasicMultiList *Source);
    virtual bool __fastcall             RestoreFromJsonObject(TlkJSONobject *SrcObj,AnsiString &Error);
    __property T*                 Items[int Index]={read=GetItemByIndex};
    __property int                 Count={read=GetDataListCount};
    __property AnsiString             AsJSONString={read=GenerateJsonString};
    __property TlkJSONobject*          AsJSONObject={read=GenerateJsonObject};
    __fastcall                       TBasicMultiList(AnsiString JsonObjectName="");
    __fastcall                       ~TBasicMultiList();
protected:
    virtual TlkJSONobject* __fastcall    GenerateJsonObject();
private:
    TList                               *DataList;
    T* __fastcall                       GetItemByIndex(int Index);
    int __fastcall                            GetDataListCount(){return this->DataList->Count;}
};
//---------------------------------------------------------------------------


Ошибки:

[bcc32c Error] MPEngineUtils.h(103): no matching function for call to 'GetItemByIndex'
[bcc32c Error] MPEngineUtils.h(104): no matching function for call to 'GetDataListCount'

Т.е. почему-то ругается на геттер функции для пропертей Count и Items. Типы совпадают, классический компилятор не ругается.
Может кто-нибудь в к курсе где косяк ?
Re: Шаблонный класс и Clang компилятор = ошибки
От: amsdev  
Дата: 13.08.19 11:56
Оценка:
Здравствуйте, amsdev, Вы писали:

A>Т.е. почему-то ругается на геттер функции для пропертей Count и Items. Типы совпадают, классический компилятор не ругается.

A>Может кто-нибудь в к курсе где косяк ?

После 5 часов любви с бубном СЛУЧАЙНО нашел в чем был косяк:

Оказывается CLANG компилятор не видит ф-ции геттеры если они объявлены ПОСЛЕ property, которые их используют !

Т.е. в моем классе секции protected и private с ф-циями геттерами должны быть ДО секции public где объявлены property, которые их используют !

В классическом компиляторе с этим точно не было проблем ! В сумме 2 дня искал где косяк (((
Re[2]: Шаблонный класс и Clang компилятор = ошибки
От: BlackEric http://black-eric.lj.ru
Дата: 13.08.19 12:56
Оценка:
Здравствуйте, amsdev, Вы писали:

A>Здравствуйте, amsdev, Вы писали:


A>>Т.е. почему-то ругается на геттер функции для пропертей Count и Items. Типы совпадают, классический компилятор не ругается.

A>>Может кто-нибудь в к курсе где косяк ?

A>После 5 часов любви с бубном СЛУЧАЙНО нашел в чем был косяк:


A>Оказывается CLANG компилятор не видит ф-ции геттеры если они объявлены ПОСЛЕ property, которые их используют !


A>Т.е. в моем классе секции protected и private с ф-циями геттерами должны быть ДО секции public где объявлены property, которые их используют !


A>В классическом компиляторе с этим точно не было проблем ! В сумме 2 дня искал где косяк (((


У Борланда всегда так. Используемое пишем выше чем использующий. При этом private в одном файле протекают. Нужен strict private для надежной изоляции.
https://github.com/BlackEric001
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.