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