Qt中找不到与 'stoi' 匹配的函数调用
我所读到的关于使用 std::stoi 的要求是需要包含
在CMakeLists.txt中:
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)
在main.cpp中:
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <qfiledialog.h>
#include <QFile>
#include <QImage>
#include <string>
// other functions removed for space
void MainWindow::on_ColorText_returnPressed()
{
QString colorString = ui->ColorText->text();
if (colorString.length() <= 7) {
std::string colorCString = colorString.toStdString();
int R = std::stoi(colorCString, 1, 16); // cannot find
int G = std::stoi(colorCString, 1, 16); // cannot find
int B = std::stoi(colorCString, 1, 16); // cannot find
}
}
错误信息
C:\Users\Itsou\Documents\ASCII_Art_Converter\mainwindow.cpp:42: error: invalid conversion from 'int' to 'std::size_t*' {aka 'long long unsigned int*'} [-fpermissive]
C:/Users/Itsou/Documents/ASCII_Art_Converter/mainwindow.cpp: In member function 'void MainWindow::on_ColorText_returnPressed()':
C:/Users/Itsou/Documents/ASCII_Art_Converter/mainwindow.cpp:42:42: error: invalid conversion from 'int' to 'std::size_t*' {aka 'long long unsigned int*'} [-fpermissive]
42 | int R = std::stoi(colorCString, 1, 16); // cannot find
| ^
| |
| int
C:\Qt\Tools\mingw1310_64\lib\gcc\x86_64-w64-mingw32\13.1.0\include\c++\string:54: In file included from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/string:54,
In file included from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/string:54,
from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/locale_classes.h:40,
from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/ios_base.h:41,
from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/ios:44,
from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/ostream:40,
from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/unique_ptr.h:42,
from C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/memory:78,
from C:/Qt/6.11.1/mingw_64/include/QtCore/qobjectdefs_impl.h:18,
from C:/Qt/6.11.1/mingw_64/include/QtCore/qobjectdefs.h:14,
from C:/Qt/6.11.1/mingw_64/include/QtGui/qwindowdefs.h:8,
from C:/Qt/6.11.1/mingw_64/include/QtWidgets/qwidget.h:9,
from C:/Qt/6.11.1/mingw_64/include/QtWidgets/qmainwindow.h:9,
from C:/Qt/6.11.1/mingw_64/include/QtWidgets/QMainWindow:1,
from C:/Users/Itsou/Documents/ASCII_Art_Converter/mainwindow.h:4,
from C:/Users/Itsou/Documents/ASCII_Art_Converter/mainwindow.cpp:1:
C:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/basic_string.h:4119:37: note: initializing argument 2 of 'int std::__cxx11::stoi(const std::string&, std::size_t*, int)'
4119 | stoi(const string& __str, size_t* __idx = 0, int __base = 10)
| ~~~~~~~~^~~~~~~~~
C:\Users\Itsou\Documents\ASCII_Art_Converter\mainwindow.cpp:42: error: No matching function for call to 'stoi'
这是怎么回事?
解决方案
The signature of stoi is int stoi(const std::string& str, std::size_t* pos = nullptr, int base = 10).
第二个参数是一个输出指针(std::size_t*),其中 stoi 会写出它消耗了多少字符(参见 std::stoi)。当你传入 1 时,编译器会尝试把 int 1 转换成 std::size_t*。
你可以改成如下做法。注意,第二个参数是一个 nullptr,因为你不关心输出:
int R = std::stoi(colorCString.substr(1, 2), nullptr, 16);
int G = std::stoi(colorCString.substr(3, 2), nullptr, 16);
int B = std::stoi(colorCString.substr(5, 2), nullptr, 16);
或者,在Qt中解析十六进制字符串时,你可以使用 QColor:
QColor color(colorString);
if (color.isValid()) {
int R = color.red();
int G = color.green();
int B = color.blue();
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。