2013-07-29 54 views
1

的Visual C++ 2008給我這個奇怪的錯誤,所以我去掉了所有的多餘的東西在我的頭文件(util.h ),並將其歸結爲:C++語法錯誤和遺漏類型說明符

#ifndef UTIL_H 
#define UTIL_H 

void pause(); 

#endif 

當我嘗試編譯上面的代碼我得到這個:

Compiling... 
util.cpp 
util.h(4) : error C2144: syntax error : 'void' should be preceded by ';' 
util.h(4) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
<snip> 

我深感困惑。即使我註釋掉ifndef,define和endif,預處理指令,它仍然會說同樣的事情。

回答

5

看了幾個小時後,我終於明白了!

錯誤不在頭文件本身。頭文件被複制並粘貼到包含它們的源文件中。所以,我看着在我包含的文件,我在util.cpp看到:

#include "stdafx.h"b 
#include "util.h" 
<snip> 

這額外'b'導致錯誤。 C++認爲它是一個變量,但沒有看到類型說明符,所以它假設'b'是一個新的整數。然後它認爲我應該以​​3210終止其聲明'void'之前。整個問題只是一個愚蠢的額外字符,並不是一個非常有用的錯誤消息。

+0

有時,看着被錯誤指向行幫助:) –

+0

沒有那東西。該錯誤指向的行完全正常。 – charmoniumQ

+0

該行'#include「stdafx.h」b'應該已經產生了關於'#include'指令中額外標記的特定診斷。 (gcc會這樣做。)仔細閱讀C++標準指出,與#include <...>'或'#include「...」''不匹配的'#include'指令行不符合兩種形式之一未定義的行爲,但編譯器診斷錯誤非常容易。 –