2014-02-08 15 views
0

嘿,夥計們我試圖編寫一個包裝類在c + +中的文件處理,我試圖在visual-C++中使用「屬性」助手。我剛開始創建一個屬性,試圖測試它,但它給了我一個警告。
這裏是我的FileEngine.h文件:
無法用類屬性代碼定義編譯C++

#ifndef _FILEENGINE_HPP 
#define _FILEENGINE_HPP 

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

class FileEngine 
{ 

public: 

    __declspec (property (put = setFileName, get = getFileName)) string filename; 
    void setFileName(string); 
    string getFileName(); 

    FileEngine(); 
    ~FileEngine(); 

}; 

#endif 


這裏的FileEngine.cpp: 的#include 「FileEngine.hpp」

FileEngine::FileEngine() {} 

FileEngine::~FileEngine() {} 

void FileEngine::setFileName(string flname) 
{ 
if (filename != "") 
    filename = flname; 
} 

std::string FileEngine::getFileName() 
{ 
if (filename == "") 
    return NULL; 
else 
    return filename; 
} 

這是爲主。 cpp file: #include「FileEngine.hpp」

int main() 
{ 
FileEngine *file; 
file = new FileEngine(); 
file->filename = "example.dll"; 
cout << file->filename << endl; 
return 0; 
} 

這是我編譯時得到的警告。
警告C4717:「FileEngine的getFileName ::」:對所有控制路徑遞歸函數會導致運行時堆棧溢出

有人能解釋我爲什麼這個警告就要到了,我應該怎樣做才能解決這個問題?這將是很大的幫助,因爲當我運行它,stackoverflow確實發生和exe停止工作。

+1

我知道這並不能解決您的問題,而是一個更好的想法是要注意首先使用屬性。 – OMGtechy

+0

'getFileName'在它引用'filename'時調用它自己。有你的遞歸。 –

+1

也不要導入整個std命名空間。 –

回答

1

您正在訪問getter和setter中的屬性。

std::string FileEngine::getFileName() 
{ 
the filename access here will expand to getFileName(), as this is property... 
if (filename == "") 
    return NULL; 
else 
    return filename; 
} 

如此聲明的成員變量,將持有物業,然後使用成員變量..

+0

謝謝.....現在我遇到了問題。有沒有什麼所謂的「良好做法」來實現這一點。感謝您的回覆。 – Xk0nSid