无法使用类属性代码定义编译c ++

时间:2014-02-08 20:28:27

标签: c++ class visual-c++ properties

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停止工作。

1 个答案:

答案 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;
}

声明成员变量,它将保存属性,然后使用成员变量..