继续获取“无成员函数声明”错误,即使它已声明和定义

时间:2015-10-18 23:55:28

标签: c++ inheritance cmake

我有一个相当简单的情况,而且我无法应对它的事实让我发疯。

我有一个声明如下的类:

// 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_ReviewRetriever继承自ReviewRetriever,它也拒绝识别它的方法)。

我使用cmake构建,这是相关部分:

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

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

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

如果此代码摘录不足,则整个代码位于here

提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

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);
};