2013-06-05 51 views
-1
int getSpeedOfMotorInPercent(int RPM) 
{ 
    int speedOfMotor = (RPM/5000.0)*100; 
    return speedOfMotor; 
} 

static char *test_GetSpeedOfMotor(int speedInPercent) 
{ 
    mu_assert("error, RPM != 70%", speedInPercent == 70); 
    return 0; 
} 

static char *run_all_tests(int RPM) 
{ 
    mu_run_test(test_GetSpeedOfMotor(RPM)); 
    return 0; 
} 

我得到的錯誤「之稱的對象不是一個函數」 mu_run_test(test_GetSpeedOfMotor(RPM));「之稱的對象不是一個函數」的錯誤 - Ç

我試圖消除功能的指針,但後來我得到更多的錯誤。

編輯:

#define mu_assert(message, test) do { if (!(test)) return message; } while (0) 
#define mu_run_test(test) do { char *message = test(); tests_run++; if (message) return message; } while (0) 
extern int tests_run; 

這是mu_run_test功能。它是在頭文件中提供給我的。

+2

您還沒有我們顯示mu_run_test'的'定義。這對於回答這個問題至關重要。你能提供嗎? –

+1

我打賭mu_run_test是這樣的 void mu_run_test(char * x) { x() },試圖調用傳入的char *,就像它是一個函數指針一樣。 – SlxS

+0

@MagnusHoff我用'mu_run_test'函數更新了這篇文章 – Milkncookiez

回答

1

你傳遞test_GetSpeedOfMotor(RPM)test宏,這將導致該代碼:

char *message = test_GetSpeedOfMotor(RPM)(); 

因爲你可能使用一個測試框架,你不想改變,只是刪除從test_GetSpeedOfMotor函數的聲明RPM參數,並使用它像這樣:

int testRpmInPercent; 

static char *test_GetSpeedOfMotor() 
{ 
    mu_assert("error, RPM != 70%", testRpmInPercent == 70); 
    return 0; 
} 

static char *run_all_tests(int RPM) 
{ 
    testRpmInPercent = RPM; 
    mu_run_test(test_GetSpeedOfMotor); 
    return 0; 
} 

那麼你就必須找到與測試functi共享RPM值的另一種方式上。就像全局變量或測試框架必須提供的任何方法一樣。

如果你願意改變測試框架,我會修改定義這個(test後刪除()):

#define mu_run_test(test) do { char *message = test; tests_run++; if (message) return message; } while (0) 
+1

我通常不會以這種方式使用宏,但是不會這樣做。 #define mu_run_test(test)do {char * message = test; tests_run ++;如果(消息)返回消息; } while(0) 並以與原始問題相同的方式調用它。 – SlxS

+1

@SlxS:這是我在第一篇文章中提出的建議,但後來我意識到OP可能會使用外部測試框架,而您並不想像這樣修補它。 –

+0

我做了第一個建議 - 從框架的定義中刪除'()'。這不是問題。謝謝 :) – Milkncookiez

相關問題