2015-12-28 33 views
-1

我寫客戶端服務器程序的SQLite數據庫。錯誤:「類主窗口」沒有名爲成員「insertMessage」

我myserevr.cpp寫道插入消息功能類似這樣:

void myserver::insertMessage(QString IPAddrress, QDate date, QString message) 
{ 
    QSqlQuery query; 

    query.prepare("INSERT INTO messages(IPAddress, date, message)"" values(?,?,?)"); 

    query.addBindValue(IPAddrress); 
    query.addBindValue(date); 
    query.addBindValue(message); 
    query.exec(); 

    qDebug() << query.lastError(); 
} 

,我把它在main.cpp中是這樣的:

MainWindow myserver; 

bool create = QFile::exists("Message.dat"); 

if (!myserver.createConnection()) 
    return 1; 

if (create) 
    myserver.insertMessage(); 

,但我得到了以下錯誤: 「錯誤:「類主窗口」沒有名爲「insertMessage」」

我應該怎麼辦會員?非常感謝

回答

4

嘛,你不應該在定義類的成員,而不是你應該使用類名稱中使用對象名稱。 如果insertMessageclass MainWindow的功能,那麼你不應該使用myserver來定義它。

void myserver::insertMessage(QString IPAddrress, QDate date, QString message)//wrong 

正確定義應該像下面。

void MainWindow::insertMessage(QString IPAddrress, QDate date, QString message) 
{ 
    QSqlQuery query; 

    query.prepare("INSERT INTO messages(IPAddress, date, message)"" values(?,?,?)"); 

    query.addBindValue(IPAddrress); 
    query.addBindValue(date); 
    query.addBindValue(message); 
    query.exec(); 

    qDebug() << query.lastError(); 
} 

注意:當您調用inserrMessage時,應該調用相關參數。

這是你應該怎麼稱呼你的函數。

QString ip; 
QDate date; 
QString msg; 

if (create) 
     myserver.insertMessage(ip,date,msg);//no arguments given which is wrong .Pass relevant arguments . 
+0

這就是正確的,你有一個錯誤的方式。功能定義應該使用類名不反對名稱定義的功能。「MYSERVER」是對象的名稱和「主窗口」是類的名字。用類名。 –

+2

此外,「insertMessage」將IPAddrress,日期,消息作爲參數。您必須在調用「insertMessage」時傳遞這些參數。 –

+0

我寫的如你所說,並調用它像這樣:MainWindow.insertMessage(QString的,QDATE,QString的);但它會得到錯誤:''之前預期的非限定id。'令牌 – Hanita

1

要調用insertMessage()myserver這是MainWindow型的,對不對?但是從您發佈的代碼看來,insertMessage()函數是爲類myserver定義的。請檢查您是否在正確的對象上調用正確的功能。

你也呼籲insertMessage()不帶參數,但您提供的定義有兩個參數。請另外檢查這一點上,你是否有功能insertMessage()兩個版本,即一個在MainWindow,一個用於myserver

相關問題