gpt4 book ai didi

c++ - 使用const类型变量的for循环中的堆错误?

转载 作者:太空狗 更新时间:2023-10-29 21:45:58 25 4
gpt4 key购买 nike

为了练习,我尝试使用 QT 库选择一个文件夹并列出该文件夹中的 dicom 文件的名称。以下是相关代码:

int main(int argc, char* argv[])
{


QApplication app(argc, argv);
QString fileName = QFileDialog::getExistingDirectory();


if (fileName.isEmpty())
{
std::cout << "Got an empty file!\n";
}
else
{
QStringList nameFilter;
QDir dir(fileName);
nameFilter << "*.dcm";
QFileInfoList list = dir.entryInfoList( nameFilter, QDir::Files );
int numberOfFiles=list.count();

for(int i=0;i<numberOfFiles;i++)
{
QString filena=list[i].fileName();
string a=filena.toStdString();
cout<<a<<endl;

}
}
return 0;
}

在这里我发现函数toStdString,实际上是std::string QString::toStdString () const,给出了堆错误。我知道消除此错误的替代方法是使用 toLocal8Bit().constData(),但我很好奇 toStdString 提供的堆错误背后的主要原因是什么。是不是因为它是 const 类型,而我的 for 循环每次都试图覆盖 const 变量?

最佳答案

您的代码看起来不错 - 确保您的 Qt 的 dll 文件是使用您正在使用的相同编译器(以及相同的调试/发布配置)编译的。

回答您的一些问题:

Is it because it is const type and my for loop is trying overwrite the const variable everytime?

不,您的 for 循环并没有试图覆盖 const 变量。 Const 变量位于赋值运算符的右侧,因此您的 for 循环是从 const 变量读取,并且它不会覆盖任何内容(您的 a 变量是局部变量在 for 循环的 block 内可见,因此 a 在循环的每次传递中都是不同的)。

即使您尝试覆盖 const 变量,也不会编译 - 尝试更改 const 会在编译时中断,而不是在运行时中断。

关于c++ - 使用const类型变量的for循环中的堆错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16359898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com