2015-10-18 69 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