打代码就行了 2024-06-20 17:43 采纳率: 0%
浏览 105

Qt报错 QSTACK

widget.cpp:22:12: No viable constructor or deduction guide for deduction of template arguments of 'QStack'
qstack.h:12:7: candidate template ignored: couldn't infer template argument 'T'
qstack.h:12:7: candidate function template not viable: requires 1 argument, but 0 were provided

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-20 17:43
    关注

    引自免费微信小程序:皆我百晓生

    根据你提供的错误信息,看起来你试图创建一个 QStack 对象时遇到了问题。错误信息表明编译器无法推断模板参数 T,并且在尝试创建 QStack 对象时没有提供所需的参数。QStack 是 Qt 框架中的一个容器类,用于存储一系列的相似类型的元素。它的构造函数通常需要指定存储元素的类型。

    解决这个问题的方法取决于你的具体代码和你想要达到的目的。以下是一些可能的解决方案:

    解决方案 1:明确指定模板参数类型

    如果你在创建 QStack 对象时没有指定模板参数类型,编译器就无法推断应该使用哪种类型。你可以尝试明确指定模板参数类型来解决这个问题。例如,如果你想要存储 QWidget 类型的对象,你可以这样做:

    QStack<QWidget> stack;
    

    解决方案 2:检查构造函数的参数

    错误信息中提到构造函数需要 1 个参数,但没有提供。你需要检查你的代码,确保在创建 QStack 对象时提供了正确的参数。例如:

    QStack<QWidget> stack(new QWidget()); // 这里创建了一个包含一个新 QWidget 的 QStack
    

    解决方案 3:检查你的代码逻辑

    如果上述解决方案都不适用,你可能需要重新检查你的代码逻辑。确保你在正确的上下文中使用 QStack,并且了解你试图实现的功能。有时,代码逻辑错误可能导致类似的问题。

    代码示例

    下面是一个使用 QStack 的简单示例,展示了如何正确创建和使用 QStack 对象:

    #include <QApplication>
    #include <QStack>
    #include <QWidget>
    #include <QPushButton>
    
    int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
        QStack<QWidget*> stack; // 创建 QStack 对象,用于存储 QWidget* 类型的对象
        stack.push(new QPushButton("Button 1")); // 添加一个按钮到栈中
        stack.push(new QPushButton("Button 2")); // 再添加一个按钮到栈中
        // ... 其他代码 ...
        return app.exec(); // 运行应用程序事件循环
    }
    

    请根据你的具体情况调整代码。如果你能提供更多的代码上下文或详细描述你的需求,我可以提供更具体的帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月20日