C++ 编译错误QT-无法从类型强制转换

C++ 编译错误QT-无法从类型强制转换,c++,linux,macos,qt,gcc,C++,Linux,Macos,Qt,Gcc,我试图在QT上编译一个项目,但显示了许多错误,其中一个错误出现在第二行: QString filename = QFileDialog::getSaveFileName(... printf("save clustering: %s\n",filename.toStdString() ); // ERROR 。。。错误:无法从类型“std::string”(又名“basic_string,allocator>”)转换为指针类型“char*” printf(“保存群集:%s\n”,filenam

我试图在QT上编译一个项目,但显示了许多错误,其中一个错误出现在第二行:

QString filename = QFileDialog::getSaveFileName(...
printf("save clustering: %s\n",filename.toStdString() ); // ERROR
。。。错误:无法从类型“std::string”(又名“basic_string,allocator>”)转换为指针类型“char*” printf(“保存群集:%s\n”,filename.toStdString())


这个项目是在Linux(gcc 5.2.1)上构建的,但我转移到了MacOSXsierra(gcc 5.4.0)。我不知道我能做些什么来解决这个问题。有人能帮我吗?

printf
无法将
std::string
作为参数处理,您必须选择以下选项之一:

filename.toLocal8Bit.data()
filename.toLatin1().data()
filename.toStdString().c_str()
filename.toStdWString().c_str()
当您使用Qt时

您可以使用
QDebug
在控制台中打印

它不需要任何转换。

您可以直接打印
QString

qDebug() << filename;

qDebug()您可能需要调用该字符串的
c_str()
函数。但是,为什么要使用
printf()
而不是
std::cout