頭文件 Test.h 的內容是
class Test
{
public:
virtual void test1();
}
實現文件是
Test.cpp
#include "Test.h"
#include <iostream>
using namespace std;
void Test::test1(){ cout<<"Hello"<<endl; }
編譯時出現錯誤
c:\program files\microsoft visual studio\vc98 \include\errno.h(29) : error C2143: syntax error : missing ';' before 'string'
c:\program files\microsoft visual studio\vc98\include\errno.h(29) : fatal error C1004: unexpected end of file found
不把這兩個文件連接起來考慮是很難知道是那裡錯了,況且Unmi原來又是寫 java比C++多得多,java可沒有#include的用法,其實有C++經驗的人,明白了 #include只是把被包含文件的內容引入到當前位置。
上面把Test.h的內容插入到Test.cpp文件中#include "Test.h"處 ,那就要注意了,類聲明後必須要加上一個分號,可以把類聲明當成是普通的變 量聲明語句一樣,需要一分號結束,不然會出現許多不可預知的編譯錯誤
錯誤類型並非就是只出現上面那樣,主要看頭文件內容引入到當前位置後, 與隨後語句差一個分號會出現什麼語法錯誤,所以應該養成類聲明後加分好的習 慣就不會錯的。
比如實現文件寫成
#include "Test.h"
void Test::test1(){}
出現的錯誤就是
#include "Test.h" void Test::test1(){} C:\Documents and Settings\yanbin\My Documents\Visual Studio Projects\TestVirtual\Test.cpp(3) : error C2628: 'Test' followed by 'void' is illegal (did you forget a ';'?) C:\Documents and Settings\yanbin\My Documents\Visual Studio Projects\TestVirtual\Test.cpp(3) : error C2556: 'class Test __thiscall Test::test1(void)' : overloaded function differs only by return type from 'void __thiscall Test::test1(void)' c:\documents and settings\yanbin\my documents\visual studio projects\testvirtual\test.h(4) : see declaration of 'test1' C:\Documents and Settings\yanbin\My Documents\Visual Studio Projects\TestVirtual\Test.cpp(3) : error C2371: 'test1' : redefinition; different basic types c:\documents and settings\yanbin\my documents\visual studio projects\testvirtual\test.h(4) : see declaration of 'test1'
因為編譯器看到了頭文件的類聲明與語句 void Test::test1(){} 之間沒 有分號。