在我的mainwindow.cpp中是調用的地方。呼叫應該發生在點擊按鈕的事件上。錯誤說cannot call member function 'void Foo::setFooAttributes(A&, B&, C&, D&)' without object
。QT,C++不能在沒有對象的情況下調用成員函數
void MainWindow::on_generateButton_clicked()
{
setCreator(ui->interfaceCreatorName->text());
setAlternateName(ui->interfaceAlternateName->text());
setDomain(ui->interfaceDomain->text().toInt());
QString filename = getCreator() + "'s " + getAlternateName() + ".txt";
QFile file(filename);
A a; B b; C c; D d;
Foo::setFooAttributes(a,b,c,d); //ERROR: cannot call member function without object
generateTop(file);
generateMiddle(file);
generateSecondaryMid(file);
generateLast(file);
generateTertiaryMid(file, a, b, c, d);
}
函數本身看起來像這樣:
void Foo::setFooAttributes(A &aFoo, B &bFoo, C &cFoo, D &dFoo){
aFoo.stopPoint = MainWindow.ui->aInterfaceStopPoint->text().toDouble();
aFoo.rate = MainWindow.ui->aInterfaceRate->text().toInt();
aFoo.domain = MainWindow.ui->aInterfaceDomain->text().toInt();
aFoo.length = MainWindow.ui->aInterfaceLength->text().toInt();
bFoo.stopPoint = MainWindow.ui->bInterfaceStopPoint->text().toDouble();
bFoo.rate = MainWindow.ui->bInterfaceRate->text().toInt();
bFoo.domain = MainWindow.ui->bInterfaceDomain->text().toInt();
bFoo.length = MainWindow.ui->bInterfaceLength->text().toInt();
cFoo.stopPoint = MainWindow.ui->cInterfaceStopPoint->text().toDouble();
cFoo.rate = MainWindow.ui->cInterfaceRate->text().toInt();
cFoo.domain = MainWindow.ui->cInterfaceDomain->text().toInt();
cFoo.length = MainWindow.ui->cInterfaceLength->text().toInt();
dFoo.stopPoint = MainWindow.ui->dInterfaceStopPoint->text().toDouble();
dFoo.rate = MainWindow.ui->dInterfaceRate->text().toInt();
dFoo.domain = MainWindow.ui->dInterfaceDomain->text().toInt();
dFoo.length = MainWindow.ui->dInterfaceLength->text().toInt();
}
我把代碼的其餘部分,包括貼在這裏pastebin source
我第一次嘗試調用setFooAttributes(a,b,c,d);
沒有Foo::
但是這給了我foo.h中錯誤如'setFooAttributes' was not declared in this scope
問題是關於基本的C++。您調用Foo :: setFooAttributes的方式僅適用於靜態函數。否則,你需要做的是錯誤所說的 - 擁有Foo類的對象。 Foo f; f.setFooAttributes(); – mvidelgauz
嗨,ty快速回復。我想一次爲多個對象設置屬性,而不是a.setAttributes,b.setAttributes等。理想情況下,調用將是「setFooAttributes(a,b,c,d);」但編譯器對範圍持懷疑態度。我不知道如何解決範圍問題,所以我如上所示 – Ranfan
您可以使該函數成爲非類函數。只要將它移出課程並在沒有'Foo ::'的情況下調用它。 – Bugfinger