大家好,我试图编写一个包装类来用c ++处理文件,而我试图在visual-c ++中使用“属性”助手。我刚开始,所以我创建了一个试图对其进行测试的属性,但它给了我警告。
这是我的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停止运行。
最佳答案
您正在使用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;
}
因此声明成员变量,它将保留属性,然后使用成员变量。