0

私が持っているのはmain.cpp

#include "myclass.h"
#include <QApplication>
#include <QTextEdit>
#include <QtGui>

class Notepad : public QWidget {
    Q_OBJECT

    public: 
        Notepad();

    private slots:
        void quit();

    private:
        QTextEdit *textEdit;
        QPushButton *quitButton;    
};

Notepad::Notepad()
{
    textEdit = new QTextEdit();
    quitButton = new QPushButton(tr("Quit"));

    connect(quitButton, SIGNAL(clicked()), this, SLOT(quit()));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(textEdit);
    layout->addWidget(quitButton);

    setLayout(layout);

    setWindowTitle(tr("Notepad"));
}

void Notepad::quit()
{
    QMessageBox messageBox;
    messageBox.setWindowTitle(tr("Notepad"));
    messageBox.setText(tr("Do you really want to quit?"));
    messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
    messageBox.setDefaultButton(QMessageBox::No);

    if(messageBox.exec() == QMessageBox::Yes)
        qApp->quit();
}


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    return app.exec();
}

エラー情報:

1>main.obj : error LNK2001: Unresolvable external symbol "public: virtual struct QMetaObject const * __thiscall Notepad::metaObject(void)const " (?metaObject@Notepad@@UBEPBUQMetaObject@@XZ)
1>main.obj : error LNK2001: Unresolvable external symbol "public: virtual void * __thiscall Notepad::qt_metacast(char const *)" (?qt_metacast@Notepad@@UAEPAXPBD@Z)
1>main.obj : error LNK2001: Unresolvable external symbol "public: virtual int __thiscall Notepad::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Notepad@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>main.obj : error LNK2001: Unresolvable external symbol "public: static struct QMetaObject const Notepad::staticMetaObject" (?staticMetaObject@Notepad@@2UQMetaObject@@B)

私はVSとQtが初めてです。これに対する解決策を見つけたいと思っています。ありがとう。

4

3 に答える 3

0

私はこれに対する解決策を見つけ(最終的に!)、ここに投稿すると思いました。次のページを見つけました: http://msdn.microsoft.com/en-us/library/aa267384%28v=vs.60%29.aspx キーピースが消えた場合に備えて、ここに貼り付けます: To use this run-time図書館

Single-threaded (libc.lib) 
Multithreaded (libcmt.lib) 
Multithreaded using DLL (msvcrt.lib)    
Debug Single-threaded (libcd.lib)   
Debug Multithreaded (libcmtd.lib) 
Debug Multithreaded using DLL (msvcrtd.lib) 

これにより、必要なランタイル ライブラリと不要なランタイル ライブラリがわかります。
そのため、リリース モード、マルチスレッド DLL (/MD) を設定しても機能しませんでした。問題は、リンカ (入力の下) に /NODEFAULTLIB の間違った値があり、3 つのエントリがありました。それらのうち、msvcrt.lib を使用しようとしていたものです。それを次のように変更するとすぐに: (NODEFAULTLIB項目ではない他のすべての値を残します)

/NODEFAULTLIB:libc.lib
/NODEFAULTLIB:libcmt.lib
/NODEFAULTLIB:libcd.lib
/NODEFAULTLIB:libcmtd.lib                
/NODEFAULTLIB:msvcrtd.lib                

(私が興味を持っているものがないことに注意してください。それは非デバッグ マルチスレッド dll lib msvcrt.lib です) 110% 動作しました!!!

役に立つと思ったら、スタックが少しの間投稿を許可していませんでした。うまくいけば、これを投稿できるようになります。

于 2015-01-02T21:30:33.593 に答える