[解決済み】エラー。C2228: ''の左側には class/struct/union が必要です。
質問
私は長い間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;
これは、"に関連するものです(ただし、正確にはありません)。 最も厄介なパース と同じ言語ルールに起因しています。 文は、そのように解析できるのであれば、関数宣言である。 .
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] エラー 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.
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較