C++ 类中继承QObject的方法在调用时被标识为属性,不';t运行法

C++ 类中继承QObject的方法在调用时被标识为属性,不';t运行法,c++,qt,C++,Qt,基本上,我有一个我正在做的项目,应该是一个Tic-Tac-Toe的图形游戏,从主qml文件对一个名为“game”的类的方法调用(以及任何方法调用)都不起作用。返回此错误: TypeError:object[object]的属性“takeTurn”不是函数 我在这个类中继承了QObject,还包含了Q_对象宏,并将该方法标记为Q_可调用 代码编译和链接非常好,这是一个运行时错误 以下是相关代码以帮助您: Game.hpp: #define GAME_HPP #include "Board.hpp

基本上,我有一个我正在做的项目,应该是一个Tic-Tac-Toe的图形游戏,从主qml文件对一个名为“game”的类的方法调用(以及任何方法调用)都不起作用。返回此错误:

TypeError:object[object]的属性“takeTurn”不是函数

我在这个类中继承了QObject,还包含了Q_对象宏,并将该方法标记为Q_可调用

代码编译和链接非常好,这是一个运行时错误

以下是相关代码以帮助您:

Game.hpp:

#define GAME_HPP

#include "Board.hpp"
#include <ostream>

#include <QObject>

class Game : public QObject
{
    Q_OBJECT;
    public:
        //...
        Q_INVOKABLE void takeTurn(int x, int y);
        Q_INVOKABLE bool checkWin();

        friend std::ostream& operator<<(std::ostream&, const Game&);
    private:
        char player_;
        int turns_;
        Board board_;
};

std::ostream& operator<<(std::ostream&, const Game&);

#endif // GAME_HPP

您已将游戏注册为一个类型,因此需要创建该类型的对象,错误指向该问题:

// ...
Window {
    visible: true
    width: 600
    height: 600
    title: qsTr("TicTacToe")
    Game {
        id: game
    }

    // ...
    Item {
        // ...
        MouseArea {
            id: mouseArea1
            anchors.fill: parent
            onClicked: {
                game.takeTurn(0,0)
            }
       }
    }
    // ...
/。。。
窗口{
可见:正确
宽度:600
身高:600
标题:qsTr(“Tictatcoe”)
游戏{
id:游戏
}
// ...
项目{
// ...
鼠耳{
id:mouseArea1
锚定。填充:父级
再次点击:{
游戏。轮流(0,0)
}
}
}

//…
您已将游戏注册为一个类型,因此您需要做的是创建该类型的对象,错误指向该问题:

// ...
Window {
    visible: true
    width: 600
    height: 600
    title: qsTr("TicTacToe")
    Game {
        id: game
    }

    // ...
    Item {
        // ...
        MouseArea {
            id: mouseArea1
            anchors.fill: parent
            onClicked: {
                game.takeTurn(0,0)
            }
       }
    }
    // ...
/。。。
窗口{
可见:正确
宽度:600
身高:600
标题:qsTr(“Tictatcoe”)
游戏{
id:游戏
}
// ...
项目{
// ...
鼠耳{
id:mouseArea1
锚定。填充:父级
再次点击:{
游戏。轮流(0,0)
}
}
}

//…
有效!我…没有看到,我看的指南没有提到在qml文件中创建对象的任何内容。我应该早一点尝试:/非常感谢!@MerlinNewcomb看到它有效了!我…没有看到,我看的指南没有提到在qml文件中创建对象的任何内容。我应该尝试一下早一点:/太谢谢你了!@merlinb
import QtQuick.Window 2.12
import com.myself 1.0

Window {
    visible: true
    width: 600
    height: 600
    title: qsTr("TicTacToe")

    Item {
        //...

        MouseArea {
            id: mouseArea1
            anchors.fill: parent
            onClicked: {
                Game.takeTurn(0,0)
            }
        }
    }
//...

}
//...
// ...
Window {
    visible: true
    width: 600
    height: 600
    title: qsTr("TicTacToe")
    Game {
        id: game
    }

    // ...
    Item {
        // ...
        MouseArea {
            id: mouseArea1
            anchors.fill: parent
            onClicked: {
                game.takeTurn(0,0)
            }
       }
    }
    // ...