Qt中找不到与 'stoi' 匹配的函数调用

移动开发 2026-07-08

我所读到的关于使用 std::stoi 的要求是需要包含 头文件,并且确保在C++11或更高版本下编译,但我两项都符合,结果仍然编译失败。

在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章