不断收到错误"no member function declared"即使它已声明和定义

Keep getting "no member function declared" error, even though it is declared and defined

本文关键字:定义 声明 declared function 错误 member no      更新时间:2023-10-16

我有一个相当简单的情况,而我无法处理它的事实使我发疯。

我有一个这样声明的类:

// inc/Services/Specific/ReviewRetriever.h
#include "../../ReviewRetriever.h"
class Specific_ReviewRetriever : public ReviewRetriever
{
public:
    Specific_ReviewRetriever(Service* service);
    ~Specific_ReviewRetriever() = default;
};

类的实现如下:

// src/Services/TrustedShops/ReviewRetriever.cpp
#include <string>
#include <vector>
#include "Service.h"
#include "Services/Specific/ReviewRetriever.h"

Specific_ReviewRetriever::Specific_ReviewRetriever(Service* service) :
    ReviewRetriever(service)
{
}
std::string Specific_ReviewRetriever::prepare_update_link(std::string link)
{
}
std::vector<int> Specific_ReviewRetriever::parse_response(boost::property_tree::ptree responseXML)
{
}

这个类继承自如下声明的类:

// inc/ReviewRetriever.h
#include <string>
#include <vector>
#include <boost/property_tree/ptree.hpp>
#include "Review.h"
class Service;
class ReviewRetriever
{
public:
    ~ReviewRetriever() = default;
    void retrieve(std::vector<Review> & reviews);
protected:
    ReviewRetriever(Service* service);
    virtual std::string prepare_update_link(std::string link) = 0;
    virtual std::vector<Review> parse_response(boost::property_tree::ptree responseXML) = 0;
    Service* _service;
};

这个类的定义如下:

// src/ReviewRetriever.cpp
#include <vector>
#include <string>
#include <boost/property_tree/ptree.hpp>
#include "Review.h"
#include "ReviewRetriever.h"
void ReviewRetriever::retrieve(std::vector<Review> & reviews)
{
}

一个相当简单的类和另一个从它继承的类。但是当我尝试编译代码时,我得到以下错误:

no ‘std::string Specific_ReviewRetriever::prepare_update_link(std::string)’
member function declared in class ‘Specific_ReviewRetriever’

所以,即使我得到了类的实现,编译器似乎没有注意到它(即使它看到类specific_reviewretriver继承自reviewretriver,它拒绝识别它的方法)。

我用cmake构建,下面是相关的部分:

// src/CMakeLists.txt
file(GLOB_RECURSE sources *.cpp)
target_include_directories(my_target PRIVATE ${PROJECT_SOURCE_DIR}/inc/)

(此处${PROJECT_SOURCE_DIR}src/../)。

所以正如我提到的,类的实现和声明是存在的,但是编译失败了。我知道问题可能不在表面上,但我真的不知道从哪里开始跟踪错误,也许你有一个建议。

如果这段代码不够,完整的代码在这里。

提前感谢!

您仍然需要在派生类中声明要重写的函数:

class Specific_ReviewRetriever : public ReviewRetriever
{
public:
    Specific_ReviewRetriever(Service* service);
    ~Specific_ReviewRetriever() = default;
    // Overrides:
    virtual std::string prepare_update_link(std::string link);
    virtual std::vector<int> Specific_ReviewRetriever::parse_response(boost::property_tree::ptree responseXML);
};