当前位置:主页   - 电脑 - 程序设计 - C/C++
C++的头文件中类声明后忘记加分号产生不可预期的编译错误
来源:网络   作者:   更新时间:2012-02-14
收藏此页】    【字号    】    【打印】    【关闭

  头文件 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 filesmicrosoft visual studiovc98includeerrno.h(29) : error C2143: syntax error : missing ';' before 'string'
c:program filesmicrosoft visual studiovc98includeerrno.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 SettingsyanbinMy DocumentsVisual Studio ProjectsTestVirtualTest.cpp(3) : error C2628: 'Test' followed by 'void' is illegal (did you forget a ';'?)
C:Documents and SettingsyanbinMy DocumentsVisual Studio ProjectsTestVirtualTest.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 settingsyanbinmy documentsvisual studio projectstestvirtualtest.h(4) : see declaration of 'test1'
C:Documents and SettingsyanbinMy DocumentsVisual Studio ProjectsTestVirtualTest.cpp(3) : error C2371: 'test1' : redefinition; different basic types
    c:documents and settingsyanbinmy documentsvisual studio projectstestvirtualtest.h(4) : see declaration of 'test1'

  因为编译器看到了头文件的类声明与语句 void Test::test1(){} 之间没有分号。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明