2011-04-13 40 views
6

Tôi đã thêm lớp IcecastServer vào dự án QT của mình, thêm tệp tiêu đề vào tệp chuyên nghiệp và thêm một số mã. Mỗi lần tôi biên dịch nó các lỗi sau đây xảy ra:QT lỗi không xác định tham chiếu khi cố gắng biên dịch

phát hành/icecastserver.o:. Icecastserver.cpp :(văn bản + 0x39): tài liệu tham khảo không xác định để _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference toimpZN12QHostAddressC1ENS_14SpecialAddressE' phát hành/icecastserver.o: icecastserver . cpp :(văn bản + 0x68): tài liệu tham khảo không xác định để _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to _imp _ZN12QHostAddressD1Ev ' phát hành/icecastserver.o: icecastserver.cpp :(văn bản + 0x9d):. tài liệu tham khảo không xác định để _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference toimpZN12QHostAddressD1Ev' phát hành/icecastserver .o: icecastse . Rver.cpp :(văn bản + 0x4bd): tài liệu tham khảo không xác định để _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to _imp _ZN12QHostAddressC1ENS_14SpecialAddressE ' phát hành/icecastserver.o: icecastserver.cpp :(văn bản + 0x4ec):. Tài liệu tham khảo không xác định để _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference toimpZN12QHostAddressD1Ev' phát hành /icecastserver.o: icecastserver.cpp :(văn bản + 0x521):. tài liệu tham khảo không xác định để _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x858): undefined reference to _imp _ZN12QHostAddressD1Ev'

tôi đang làm gì sai?

Đây là tiêu đề-file:

#ifndef ICECASTSERVER_H 
#define ICECASTSERVER_H 

#include <QObject> 

QT_BEGIN_NAMESPACE 
class QTcpServer; 
QT_END_NAMESPACE 

class IcecastServer : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit IcecastServer(QObject *parent = 0); 

signals: 

public slots: 

private: 
    QTcpServer *tcpServer; 
}; 

#endif // ICECASTSERVER_H 

Đây là nguồn gốc-file:

#include "icecastserver.h" 
#include "QDebug" 
#include <QtNetwork/QTcpServer> 
#include <QtGui> 

IcecastServer::IcecastServer(QObject *parent) : 
    QObject(parent) 
{ 

    tcpServer = new QTcpServer(this); 
    //tcpServer->listen(QHostAddress::Any,8000); 

    if (!tcpServer->listen()){ 
     QMessageBox::critical(NULL, tr("Fortune Server"), tr("Unable to start the server: %1.").arg(tcpServer->errorString())); 

     return; 
    } 

} 

Trả lời

7

Trước tiên, bạn cần phải #include <QHostAddress> một nơi nào đó giả định rằng nhận xét ngoài dòng là nguyên nhân gây ra sự cố.

Bạn cũng có thể kiểm tra một số cài đặt dự án để xem bạn có tất cả các yếu tố đầu vào chính xác không.

Chỉnh sửa: Chi tiết khác

QtNetwork yêu cầu đầu vào lib mạng QT. Giả sử một lần nữa rằng bạn đang sử dụng QtCreator như không có nhiều thông tin được cung cấp sau đó điều này có nghĩa trong file .pro của bạn, bạn cần phải có một dòng như vậy:

QT += network

Sau đó, chắc chắn rằng bạn bao gồm các tiêu đề phù hợp với các các đối tượng bạn đang sử dụng trước khi sử dụng chúng. Nếu bạn vẫn nhận được tài liệu tham khảo không xác định, liên kết lỗi, vv hãy thử một QMake và xây dựng lại. Nếu nó vẫn còn tồn tại, bạn có thể có lỗi trong mã của bạn ngoài lỗi sử dụng QT và nên xác nhận rằng phương pháp và đối tượng của bạn đang được sử dụng đã được khai báo đúng cách.

cuối cùng Edit: Rất vui khi làm việc ...

Khi bạn tạo một dự án mới trong QtCreator có một bước trong trình hướng dẫn nơi bạn có thể đánh dấu vào các thư viện QT khác nhau mà bạn muốn bao gồm trong đó sẽ bổ sung này. pro dòng và đầu vào cho bạn. Đây là phiên bản QT nhập các tập tin lib bổ sung và theo mặc định chúng sẽ được liên kết tĩnh tôi tin.Nếu bạn muốn liên kết động với các đối tượng chia sẻ hoặc dll thì có một số bước cấu hình bổ sung.

+0

Tôi đã thêm rằng bao gồm nhưng như bạn đã nói, nhận xét của nó ra, do đó không khắc phục được sự cố. Bạn đang nói đến đầu vào nào? – Hedge

+1

yay! Thêm mạng vào tập tin chuyên nghiệp đã khắc phục sự cố. – Hedge

+0

cho 'QT + = network' tham chiếu có thể được tìm thấy tại https://doc.qt.io/qt-4.8/qmake-variable-reference.html#qt – n611x007

1

Bạn đang chạy công cụ moc trên tập tin tiêu đề của bạn? Sau đó bạn có đang biên dịch đầu ra từ công cụ moc không?

+0

Tôi đang sử dụng Trình tạo Qt. Những gì tôi đã làm là thực hiện qmake và sau đó chạy chương trình. – Hedge

+1

@Hedge QMake chạy công cụ moc (trình biên dịch đối tượng meta) để có thể giả định rằng bạn có thiết lập QtCreator để xây dựng các nguồn ngày trước khi chạy tệp thực thi là hành vi mặc định. Bạn chỉ cần thực hiện điều này khi thay đổi hoặc thêm các công cụ 'Q_OBJECT' thường. – AJG85

+0

Cảm ơn bạn đã giáo dục tôi. Tôi sẽ ghi nhớ điều đó. – Hedge

Các vấn đề liên quan