Crazy c++ error: ... ... which is non-class type...
2022-02-14 08:48:51
コードは以下の通りです。
//sqlite_interface.h
class SqlteOp {
private:
sqlite3 *db;
public:
SqlteOp(string dbname);
~SqliteOp();
void print();
}
//sqlite_interface.cpp
SqliteOp::SqliteOp(string dbname)
{
cout<<"db name is: "<<<dbname<<endl;
sqlite3_open(dbname.c_str(), &db);
...
}
SqliteOp::print()
{
cout<<"Sqlite Operation print function"<<<endl;
...
}
SqliteOp::~SqliteOp()
{
cout<<"destroy sqlite op object"<<<endl;
sqlite3_close(db);
}
//main.cpp
int main(int argc, char **argv)
{
SqliteOp sqliteOp(string(argv[1]));
sqliteOp.print();
return 0;
}
//compile
dk@dkos:~ g++ --std=c++11 main.cpp sqlinteop.cpp -I /usr/local/include -L /usr/local/lib -lsqlite3 -lpthread -ldl
// error reporting
main.cp:14:13: error: request for member 'print' in 'sqliteOp', which is of non-class type .......
むかつく、とてもむかつく、このエラーはおかしすぎる、言語を使いづらくしている、コンパイルやデバッグのコストが大きすぎる.私は言葉を失いました、解決策を見てください、g++の投稿をclang++に置き換えてコンパイルしてみてください(なぜclangを使うのか、clangはより良いエラーメッセージを表示できるからです)、特定のヒントを参照してください。
dk@dkos:~ clang++ --std=c++11 main.cpp sqlinteop.cpp -I /usr/local/include -L /usr/local/lib -lsqlite3 -lpthread -ldl
// The prompt is as follows
main.cpp:14:23: note: add a pair of parentheses to declare a variable
SqliteOp sqliteOp(string(argv[1]));
^
( )
ヒントに従って追加したところ、うまくコンパイルできました。おそらく、コンパイラはこの定義をクラス定義としてではなく、関数宣言として扱っているのでしょう。
同じような問題を後でググってみたら、他の人もヒットしていましたが、その人は次のリンクでもう少し分かりやすく説明していました。
http://dehun.bitbucket.org/articles/23_oct_2013-Error%20which%20is%20of%20non-class%20type.html
関連
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】「Press Any Key To Exit」を実装する方法【重複あり
-
[解決済み] c++の多重定義エラーとその解決方法
-
[解決済み] エラー LNK2005, 既に定義されていますか?
-
[解決済み] error: 'test' のアウトオブライン定義が 'B<dim>' のどの宣言とも一致しない。
-
[解決済み] C++で文字列とintを掛け合わせる
-
[解決済み] C++とSDL:SDL_Rectは具体的にどのように機能するのですか?
-
[解決済み] const char*, char const*, const char const* & 文字列ストレージの違い
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み] 1つの引数を取る関数に評価されないterm
-
[解決済み] ERROR コントロールが非ボイド関数の末尾に達する可能性があります。
-
[解決済み] エラーです。ファイル内で最初に参照されたシンボルが未定義です
-
[解決済み] Netbeans 7.2では、ビルドは成功したものの、「識別子を解決できない」と表示される。
-
[解決済み] list::list' は型ではなく、コンストラクタを指定します。
-
[解決済み] c++ ifstream 未宣言識別子
-
[解決済み] curl.h にそのようなファイルやディレクトリはありません。
-
[解決済み] GLSLドットプロダクトの不具合
-
[解決済み] myItem*' から非スカラ型 'myItem' への変換を要求される