2017-05-17 70 views
-1

我想用我的main()函數中的下列代碼連接到mysql數據庫。有趣的代碼行爲

MYSQL *connect = mysql_init(NULL); 

它工作正常,我得到一個返回的指針值。

我已創建的另一個C++文件與在它的函數,如下面

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

編譯和連接細,我已經多次打電話給在主函數的同一行的代碼(作爲測試)和一切正常,但是當我運行代碼時,它在Newl_connection()函數的行中失敗。

我已將Newl_connection剝離爲儘可能基本,並將包含Main()的文件中的所有標題包含到包含Newl_connection()函數的文件中。

編譯器錯誤我收到是

程序接收到的信號SIGABRT,中止。 0x00007ffff6bc6428 in __GI_raise(sig = sig @ entry = 6)at ../sysdeps/unix/sysv/linux/raise.c:54 54 ../sysdeps/unix/sysv/linux/raise.c:沒有這樣的文件或目錄。

嘗試將類型名稱用作表達式。

嘗試使用類型名稱作爲表達

嘗試使用類型名稱作爲表達。對於所有實例調用都會顯示,但Newl_connection()函數中的調用是終端。

我試着刪除main()中的所有其他實例,但仍然遇到同樣的問題。

爲什麼代碼應該在一個地方工作,但在另一個地方行爲不同? 幫助將不勝感激我在這一個我的智慧結束。

+0

我猜這個問題是由於不正確的包括頭文件?但是,用一個最小的,完整的例子很難說。 –

+0

當你調用這個函數時,你會傳遞一個有效的'FileHandler'對象嗎? –

+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)它與**指針**非常相似,但調用它是不同的。 –

+0

我知道什麼是參考。但是,如果函數被聲明爲需要引用,並且您嘗試使用指針調用它,則編譯器應該將其報告爲錯誤。 – Barmar