Hey Guys我正在尝试用c ++编写一个文件处理的包装类,我试图在visual-c ++中使用“property”帮助器。我刚刚开始,所以我创建了一个属性试图测试它,但它给了我一个警告。
这是我的 FileEngine.h 文件:
#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;
}
这是 main.cpp 文件: #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停止工作。
答案 0 :(得分: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;
}
声明成员变量,它将保存属性,然后使用成员变量..