0
我有一个相当简单的情况,而且我无法应付这个事实使我发疯。即使声明和定义了“没有成员函数声明”的错误,但它仍然被声明和定义
我已经声明为一个类如下:
// 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。
预先感谢您!
谢谢指点先生。 – nakajuice