Как исправить ошибку объявления: член класса не может быть повторно объявлен в C ++ - PullRequest
0 голосов
/ 26 июня 2019

При попытке перегрузить функцию-член класса произошла ошибка объявления.

В объявлениях класса даже Qt выявляет проблему:

error: class member cannot be redeclared
note: previous declaration is here

Это сообщение предназначено для классов, помеченных как "overload2" в приведенном ниже коде:

template <class GraphReaderType, class GraphType>
class GraphsDataset {

public:

    template <typename BoostGraphsContainer, typename LabelsContainer>
    bool readDataset(const std::string& datasetPath, BoostGraphsContainer& graphsContainer, LabelsContainer& labels) const;

    // "Overload 1"
    template <typename BoostGraphsContainer, typename LabelsContainer, typename IdsContainer>
    bool readDataset(const std::string& datasetPath, BoostGraphsContainer& graphsContainer, LabelsContainer& labels,
             IdsContainer& ids) const;
    //"Overload 2"
    template <typename BoostGraphsContainer, typename LabelsContainer, typename uniqueLabelContainer>
    bool readDataset(const std::string& datasetPath, BoostGraphsContainer& graphsContainer, LabelsContainer& labels, uniqueLabelContainer& labelsSet) const;
...
}

Сбой компиляции с жалобой на перегрузку.

GraphsDataset.hpp:120: error: ‘template<class GraphReaderType, class GraphType> template<class BoostGraphsContainer, class LabelsContainer, class uniqueLabelContainer> bool spare::GraphsDataset<GraphReaderType, GraphType>::readDataset(const string&, BoostGraphsContainer&, LabelsContainer&, uniqueLabelContainer&) const’ cannot be overloaded
     bool readDataset(const std::string& datasetPath, BoostGraphsContainer& graphsContainer, LabelsContainer& labels, uniqueLabelContainer& labelsSet) const;
          ^~~~~~~~~~~

Компиляция работает, если одна из функций-членов "Overload 1/2" удалена.

Почему эти функции нельзя перегружать вместе?

...