私の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);
}
機能自体は、次のようになります。私はここにペーストpastebin source
私が最初Foo::
なしsetFooAttributes(a,b,c,d);
を呼び出してみましたが、それは私を与えたでfoo.hという含む残りのコードを入れて
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();
}
エラーのようなエラー
'setFooAttributes' was not declared in this scope
質問は基本的なC++です。 Foo :: setFooAttributesを呼び出す方法は、静的関数にのみ適用されます。さもなければ、エラーが言っていることを正確に行う必要があります。クラスFooのオブジェクトを持っています。 Foo f; f.setFooAttributes(); – mvidelgauz
こんにちは。 a.setAttributes、b.setAttributesなどの代わりに、複数のオブジェクトの属性を一度に設定したいと思います。呼び出しは、 "setFooAttributes(a、b、c、d);"コンパイラはスコープを掴んだ。私はスコープの問題を修正する方法を知りませんでしたので、上記のようにしました – Ranfan
あなたは関数を非クラス関数にすることができます。それをクラスから移動し、 'Foo ::'なしで呼び出すだけです。 – Bugfinger