2017-05-17 6 views
-1

私のmain()機能で次のコードを使ってmysqlデータベースに接続しようとしています。おかしいコードの振る舞い

MYSQL *connect = mysql_init(NULL); 

これはうまく動作し、ポインタ値が返されます。

私は

int Newl_connection(FileHandler& pProcLog) 
{ 
    MYSQL *connect = mysql_init(NULL); 
    return 0; 
} 

コンパイル及び微細リンク以下のように関数と他のC++ファイルを作成した

は、私は(テストなど)メイン関数内のコードの同じ行にいくつかの呼び出しを行い、ましたすべてOKですが、コードを実行するとNewl_connection()関数の行で失敗します。

私はできるだけ基本的にNewl_connectionを取り除き、Main()を含むファイルからNewl_connection()関数を含むファイルにすべてのヘッダーを含めました。

私が受け取るコンパイルエラーがプログラムが中止、信号SIGABRTを受け

です。 ../sysdeps/unix/sysv/linux/raise.c:54の__GI_raise(sig = sig @ entry = 6)の0x00007ffff6bc6428 54 ../sysdeps/unix/sysv/linux/raise.c:このようなファイルはありませんまたはディレクトリ。

式として型名を使用しようとしています。式のようにタイプ名を使用する発現

試みとして型名を使用する

試み。すべてのインスタンス呼び出しに対して表示されますが、Newl_connection()関数の呼び出しはterminalです。

他のすべてのインスタンスをmain()で削除しようとしましたが、同じ問題が発生します。

コードは1か所では動作するが、別の場所では動作が異なるのはなぜですか? 助けていただければ嬉しいです。あなたの関数のヘッダーによる

+0

私はこの問題がヘッダーの間違った組み込みに起因すると推測していますか?しかし、最小限の完全な例では、それを伝えるのは難しいです。 –

+0

関数を呼び出すときに、有効な 'FileHandler'オブジェクトを渡しますか? –

+1

_ "なぜコードは1つの場所では動作するのですか?別の場所では動作が異なりますか?"あなたの[MCVE]を提示してください。 –

答えて

0

int Newl_connection(FileHandler& pProcLog) 

あなたがタイプFileHandlerの有効なオブジェクトでそれを呼び出す必要があります。 変数名をpProcLogと設定すると、それをオブジェクトへのポインタとして使用したいと思います。そして、宣言は次のようになります。

int Newl_connection(FileHandler* pProcLog) 

この方法であなたは、引数としてnull値を持つ関数が安全呼び出すことができます。

+0

C++ではこのタイプの不一致のプログラムをコンパイルできますか? – Barmar

+0

構文が正しいです。 **参照**をオブジェクトに使用する:https://en.wikipedia.org/wiki/Reference_(C%2B%2B)これは** pointer **と非常によく似ていますが、それを呼び出すことは異なります。 –

+0

私は参照が何であるか知っています。しかし、関数が参照を取るように宣言されていて、それをポインタで呼び出そうとすると、コンパイラはそれをエラーとして報告する必要があります。 – Barmar