2015-12-28 3 views
-1

Я пишу базу данных SQLite для клиентской серверной программы.Ошибка: «класс MainWindow» не имеет имени с именем «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(); 

, но я получаю следующее сообщение об ошибке: " Ошибка: «класс MainWindow» не имеет члена с именем «insertMessage» «

что мне делать? Большое спасибо

ответ

4

Ну, вы не должны использовать имя объекта при определении члена класса, вместо этого вы должны использовать имя класса. , если insertMessage является функцией class 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» - это имя объекта, а «MainWindow» - имя класса .use class name. –

+2

Кроме того, «insertMessage» принимает IPAddrress, дату, сообщение в качестве аргумента. Вы должны передать эти аргументы, называя «insertMessage». –

+0

Я написал это, как вы сказали, и назовите его так: MainWindow.insertMessage (QString, QDate, QString); но он получает ошибку: ожидаемый unqualified-id до '.' токен – Hanita

1

Вы звоните insertMessage() на myserver, который имеет тип MainWindow, верно? Но из кода, который вы опубликовали, кажется, что функция insertMessage() определена для класса myserver. Проверьте правильность работы правильного объекта.

Также вы вызываете insertMessage() без аргументов, но указанное вами определение предполагает два аргумента. Пожалуйста, еще раз проверьте этот вопрос, есть ли у вас две версии функции insertMessage(), то есть одна в MainWindow и одна для myserver.

Смежные вопросы