Ошибка преобразования «полученного указателя на член» в «базовый указатель на член»C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка преобразования «полученного указателя на член» в «базовый указатель на член»

Сообщение Anonymous »

Чтобы поддержать какую-то магию с компиляцией, я хотел бы использовать указатель-член, например: < /p>
struct BaseT
{
};

struct DerivedT: public BaseT
{
};

struct TestT
{
DerivedT testMem;

typedef BaseT (TestT::* TestTMemPtr);

constexpr TestT() = default;

static constexpr TestTMemPtr testMemOffset()
{
return &TestT::testMem;
}
};

int main()
{
constexpr TestT test;
}
< /code>
Я не могу вернуть члена по указателю к указателю в качестве члена указателя к базе, я получаю эту ошибку с помощью Clang: < /p>

не могу инициализировать return object of testt :: testtmempt Testt ::*'< /p>
< /blockquote>
Я также попробовал его с помощью GCC, но получите эту ошибку: < /p>

ошибка: неверная преобразование из' dreviedt testt ::*to 'testt :: testtmempt /> < /blockquote>
Это нормальное поведение? Я думал, что всегда могу использовать полученный указатель в качестве базового указателя? Testt ::*:
struct BaseT
{
};

struct DerivedT: public BaseT
{
};

struct TestT
{
DerivedT m_test;
};

using BaseTMemPtr = BaseT TestT::*;

int main()
{
TestT test;
BaseT* simplePtr = &test.m_test; //It is DerivedT*, but can be used as BaseT*
BaseT (TestT::*memPtr) = &TestT::m_test; //Error, BaseT TestT::* cannot be used as DerivedT TestT::*
BaseTMemPtr memPtr2 = &TestT::m_test; //Error, just the same
}


Подробнее здесь: https://stackoverflow.com/questions/695 ... -to-member
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»