-1

我想通過另一個類的構造函數傳遞一個類的引用實例。現在我不能這樣做,因爲我陷入了語法錯誤。我嘗試了幾個小時,但我學到了很多東西(比如循環依賴或前向聲明),但實際上並不能解決我的問題。我有這樣的文件:被類構造函數和初始化列表困惑,懷疑循環依賴

Project.h(Project類的構造函數傳遞的緩衝區類的一個實例參考)

Project.cpp

Buffer.h

Buffer.cpp

abo有四個文件在我的問題中是積極的(我的猜測)。

這裏是Project.h內容:

#include<string> 
#include<regex> 
#include<iostream> 
#include<vector> 
#include "Buffer.h" 

using namespace boost::filesystem; 

#ifndef PROJECT_H 
#define PROJECT_H 

class Project(Buffer & buffer_param) : bufferObj(buffer_param) 
{ 

    Buffer& bufferObj; 

public: 
    Filer& filer; 

    std::string project_directory; 
    void createList(std::vector<std::string> list_title); 
}; 

#endif 

這裏是project.cpp內容:

#include<string> 
#include<regex> 
#include<iostream> 
#include<vector> 
#include<boost\filesystem.hpp> 

#include "Project.h" 


using namespace boost::filesystem; 


void Project::createList(std::vector<std::string> list_title) 
{ 
    //this->filer.createFile(); 
} 

Buffer.h

#include<string> 
    #include<map> 


    #ifndef BUFFER_H 
    #define BUFFER_H 

    class Buffer 
    { 
     std::map<std::string, std::string> storage_str; 

     void setValueString(std::string key, std::string value); 
     std::string getValueString(std::string key); 
    }; 

    #endif 

Buffer.cpp

#include<string> 
#include<map> 
#include "Buffer.h" 


void Buffer::setValueString(std::string key, std::string value) 
{ 
    this->storage_str[key] = value; 
} 

問題:

,而沒有經過緩衝的項目構造,一切完美,但只要我開始通過它的一個實例,錯誤拋出:

Project.h文件的所有錯誤:

error C2143: syntax error : missing ')' before '&' 
error C2143: syntax error : missing ';' before '&' 
error C2079: 'Buffer' uses undefined class 'Project' 
error C2059: syntax error : ')' 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
error C2530: 'buffer_param' : references must be initialized 
error C2143: syntax error : missing ';' before ':' 
error C2448: 'bufferObj' : function-style initializer appears to be a function definition 

錯誤的Project.cpp文件:

error C2027: use of undefined type 'Project' 
    see declaration of 'Project' 
+1

'類項目(緩衝液buffer_param)'!?一個構造函數(帶或不帶init.list)與全班一樣 – deviantfan 2015-03-31 23:01:59

+0

有什麼問題?是的(我更新了這個問題,不得不在項目類的文件中輸入錯誤) – 2015-03-31 23:03:23

+1

正如我剛剛添加的,你將混淆/混合構造函數與整個類。構造函數是一個類方法,類似於createList – deviantfan 2015-03-31 23:04:37

回答

1

要詳細說明,而不是對deviantfan的評論,這

class Project(Buffer & buffer_param) : bufferObj(buffer_param) 
{ 
    ... 

應該是這樣的:

class Project 
{ 
public: 
    Project(Buffer & buffer_param) : bufferObj(buffer_param) 
    { 
    } 

private: 
    ... 
+0

謝謝。它確實有效。但是有一個問題,使用這種類型的頭文件聲明,那麼我的'Project.cpp'中不能包含'Project :: Project(){..}',是的?因爲它拋出一個錯誤,即「Project :: Project()'已經有一個主體。看來我應該在頭文件中完成構造函數的所有工作? – 2015-03-31 23:22:39

+1

@MostafaTalebi你可以(也應該)把你的構造函數的內容放在cpp文件中。但是,如果你這樣做,它不能同時在頭文件中。只有兩個文件中的一個。 – deviantfan 2015-03-31 23:37:04

相關問題