Проблема шаблона в моем суперклассе с определением структуры - PullRequest
1 голос
/ 04 февраля 2020

У меня проблема. Мой базовый класс "AB C" имеет два класса шаблонов A и B. Мой класс "superAB C" наследует AB C, но второй шаблон является фиксированным для строки. В AB C есть структура с именем "structAB C". В superAB C есть функция, которая возвращает экземпляр из structAB C. Когда я пытаюсь написать реализацию этой функции, компилятор выдает ошибку

C2244 "невозможно сопоставить определение функции с существующим объявлением".

Может кто-нибудь сказать мне, в чем проблема?

//ABC.h
#pragma once
template<class A, class B>
class ABC
{
public:
    void func();
    struct structABC {

    };

    structABC _referenceRange;
};

//superABC.h
#pragma once
#include "ABC.h"
#include "string.h"
template<class A>
class superABC:
    public ABC<A, string>
{
public:
    typename ABC<A, string>::structABC getBCD();
};

//superABC.cpp
#include "superABC.h"
template<class A>
inline typename ABC<A, string>::structABC superABC<A>::getBCD()
{
    return ABC<A, string>::structABC();
}

1 Ответ

0 голосов
/ 04 февраля 2020

Похоже, ошибка MSV C для меня; оригинальный код компилируется с помощью clang. В качестве обходного пути добавьте typedef для ABC<A, string>::structABC, например:

template<class A>
class superABC : public ABC<A, string>
{
    using structABC = typename ABC<A, string>::structABC;
public:
    structABC getBCD();
};

template<class A>
typename superABC<A>::structABC superABC<A>::getBCD()
{
    return structABC();
}

Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...