大家好,我试图编写一个包装类来用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;
}


因此声明成员变量,它将保留属性,然后使用成员变量。

08-06 12:51