filenamestr未在此作用域中声明-C++

filenamestr was not declared in this scope - C++

本文关键字:声明 -C++ 作用域 filenamestr      更新时间:2023-10-16

我正在尝试制作一个函数来获取文件大小。我尝试使用GetFileSizeEx,但无法获得我想要的结果(我希望它是整数或双精度),也无法比较它是否大于1MB。无论如何,我创建了这个函数,但我得到了一个错误,即没有声明filenamestr。

    int getsize(std::string const $filename);
...    
    int getsize(std::string const $filenamestr)
        {
            std::fstream file(filenamestr);
            file.seekg(0, std::ios::end);
            return file.tellg();
        }

我做错了什么?

在C++中,变量名前面不带美元符号。删除它应该可以解决问题:

    int getsize(std::string const filename);
...    
    int getsize(std::string const filenamestr)
        {
            std::fstream file(filenamestr);
            file.seekg(0, std::ios::end);
            return file.tellg();
        }

现在我知道你来自PHP,我可以看到困惑的来源了。:)

参数名称不需要以$开头。名称本身就可以了。当您引用filenamestr时,它会查找具有该确切标识符的变量。但它看不到它,因为$也是标识符的有效字符,并且它使$filenamestr在名称方面成为一个完全不同的变量。

变量名中不应使用美元符号$。C++标准不支持它,尽管Visual C++支持它。最好将它从参数中删除,但错误是由于filenamestr$filenamestr这两个不同的标识符存在差异。

这会解决问题。

int getsize(std::string const filename);
...    
int getsize(std::string const filenamestr)
    {
        std::fstream file(filenamestr);
        file.seekg(0, std::ios::end);
        return file.tellg();
    }