gpt4 book ai didi

c++ - 继续收到 "no member function declared"错误,即使它已声明和定义

转载 作者:行者123 更新时间:2023-11-28 06:01:28 25 4
gpt4 key购买 nike

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

我有一个声明如下的类:

// 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 .

提前致谢!

最佳答案

您仍然必须在派生类中声明要覆盖的函数:

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

关于c++ - 继续收到 "no member function declared"错误,即使它已声明和定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33204607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com