2015-10-18 22 views
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

预先感谢您!

回答

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

谢谢指点先生。 – nakajuice