[解決済み] エラーです。C2228: ''の左側にはクラス/構造体/ユニオンが必要です。
質問
私は長い間Javaユーザーで、QtでC++を学んでいますが、メソッドがどのように機能するのか理解するのに大変苦労しています。今、私はデータベースを理解しようとしていて、ヘッダーで私のコードを簡素化しようとしました。通常、JavaではDatabaseControlというクラスがあり、voidメソッドで好きなものを実行します。例えば、今やっているように、データベースに従業員を追加する。このクラスをインスタンス化するには、次のような方法をとります。
DatabaseControl myDBControl = new DatabaseControl();
でメソッドを実行し
myDBControl.addEmploye();
で、ユーザーが従業員の情報 (名前、部署など) を入力するための一連の入力ボックスが表示されます。
さて、次はC++です。ヘッダーを作成しました。
class DatabaseControl
{
public:
DatabaseControl();
~DatabaseControl();
//Methods
void addEmployee();
};
コンストラクタにパラメータを持たせていないのは、上に示したように、mainの中で"addEmployee"メソッドを呼び出したいだけだからです。同じヘッダーファイルで、クラス宣言の下に次のように記述しています。
void DatabaseControl::addEmployee(){
QSqlQuery qry;
bool ok;
QString firstName = QInputDialog::getText(NULL, "QInputDialog::getText()",
"Employee first name:", QLineEdit::Normal,
NULL, &ok);
if (ok && !firstName.isEmpty()){}
else{
QMessageBox msgBox;
msgBox.setWindowTitle("Error");
msgBox.setText("Failed to add employee.\nReason: No employee name given.");
msgBox.exec();
}
QString lastName = QInputDialog::getText(NULL, "QInputDialog::getText()",
"Employee last name:", QLineEdit::Normal,
NULL, &ok);
if (ok && !lastName.isEmpty()){
qry.prepare("INSERT INTO employees (firstname, lastname)" "VALUES (:f1, :f2)");
qry.bindValue(":f1", firstName);
qry.bindValue(":f2", lastName);
qry.exec();
}
else{
QMessageBox msgBox;
msgBox.setWindowTitle("Error");
msgBox.setText("Failed to add employee.\nReason: No employee name given.");
msgBox.exec();
}
}
で、mainにこんなのがあります。
void MainWindow::on_addEmployee_clicked()
{
DatabaseControl myDBControl();
myDBControl.addEmployee();
}
これは、ヘッダーファイルで書いたaddEmployeeメソッドを実行するだけだと思ったからです。しかし、コンパイルすると、Error: C2228: left of '.addEmployee' must have class/struct/union
このエラーの他の例を見てみましたが、何が問題なのかよく理解できません。C++のメソッドに対する私の誤解からきているような気がします。
解決方法は?
ここでエラーが発生しました。
DatabaseControl myDBControl();
という関数を宣言しましたね。
myDBControl
を返し、引数を取らない
DatabaseControl
.
コンストラクタの引数を持たないオブジェクトの宣言では、引数を省略する必要があります。
()
:
DatabaseControl myDBControl;
これは、"に関連するものです(ただし、正確にはありません)。 最も厄介なパース と同じ言語ルールに起因しています。 文は、そのように解析できるのであれば、関数宣言である。 .
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] エラー C2228: '.size' の左側にはクラス/構造体/ユニオンが必要です。
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】'cout'は型名ではない
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません