首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

error C2668: “QThread:start”: 对满载函数的调用不明确

2012-12-22 
error C2668: “QThread::start”: 对重载函数的调用不明确#include iostream#include QThread#include

error C2668: “QThread::start”: 对重载函数的调用不明确

#include <iostream>
#include <QThread>
#include <QString>

class MyThread : public QThread
{
    Q_OBJECT
public:
    MyThread(QString name = "") {
        stopped = false;
        this->name = name;
    }

    void run() {
        while (!stopped) {
            std::cout << "In " << name.toStdString() << "'s run()." << std::endl;
            QThread::msleep(400);
        }
    }

    void stop() {
        stopped = true;
    }

private:
    volatile bool stopped;
    QString name;
};

int main()
{
    MyThread thread;
    MyThread thread1("Thread1");
    MyThread thread2("Thread2");
    //
    thread.start();
    thread1.start();
    thread2.start();
    return 0;
}

哪里错了?望高手指点。
[最优解释]
多写几个文件,把你的程序分成三个文件,main.cpp,mythread.h,mythread.cpp
还有mythread的构造函数,建议用QtCreator生成类(基于qobject),改一下(qobject => qthread)就可以用了。
[其他解释]
Q_OBJECT使用的类不要放到cpp中,要单独的.h文件,moc才能正确解析。
[其他解释]
引用:
我把它们放在不同的文件中,还是不行啊!
具体的代码如下:
C/C++ code
#include <QCoreApplication>
#include <QThread>
#include "MyThread.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyThread th……

你看,把Q_OBJECT都丢掉了。
[其他解释]
还有,关键的没有等待线程结束,三个线程变量就被销毁了。
[其他解释]
现在的问题是编译都通不过,一直报C2668错误。
[其他解释]
还是那个C2668错误,我都晕了。
[其他解释]
我把它们放在不同的文件中,还是不行啊!
具体的代码如下:
#include <QCoreApplication>
#include <QThread>
#include "MyThread.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyThread thread;
    thread.start();
    return a.exec();
}

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

class MyThread:public QThread
{
protected:
    void run();


};

#endif // MYTHREAD_H



#include "MyThread.h"
#include <stdio.h>

void MyThread::run()
{
    while(1){
        printf("A");
    }
}

[其他解释]
这个会编译不过?啥错误?
[其他解释]
各位大牛,加了 Q_OBJECT 还是不行啊!
[其他解释]
折腾了半天,原来是Qt版本问题,从4.8.3换成4.8.2就没问题了。

热点排行