C++的头文件中类声明后忘记加分号产生不可预期的编译错误

头文件 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(){} 之间没 有分号。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 文件
, include
, c++ 编译错误
, test
, 分号
void
头文件函数声明、头文件声明全局变量、在头文件中声明函数、头文件中声明函数、c 头文件 函数声明,以便于您获取更多的相关知识。

时间: 2024-02-28 00:47:19

C++的头文件中类声明后忘记加分号产生不可预期的编译错误的相关文章

c++-我在头文件里声明一个变量,然后在Cpp里赋值,怎么不行呢?

问题描述 我在头文件里声明一个变量,然后在Cpp里赋值,怎么不行呢? 我的mfc程序里自定义了一个头文件,里面声明一个变量比如 int a和声明一个函数Init(): 然后自定义一个cpp,里面实现函数Init().在函数体里面给a赋值:a=6: 然后在另一个dialog cpp里TRACE这个值试试,结果说: fatal error LNK1169: 找到一个或多个多重定义的符号,已经在...obj中定义过.反正编辑时不报错,编译链接时报错.怎么回事? 我有很多变量,我希望有一个Init函数,

嵌入式软件-比较大的项目中,头文件中声明的变量和函数一般不太好确定前面是不是要加extern把

问题描述 比较大的项目中,头文件中声明的变量和函数一般不太好确定前面是不是要加extern把 比如这个.h文件中他用了一个ifdef,这个只是一个类似一个标志吧,任何程序里面都可以这样用吗,这是比较好的方式吗 解决方案 这是查看宏定义,判断是否define了这个宏.然后决定后面的各种定义.以endif结尾 解决方案二: ifdef你可以看做if..extern表示你函数定义在别的文件里.这里应该是为了防止冲突,通过宏值,决定是否是用本类中的该函数还是其他文件的相同命名的函数(起函数功能可能有所区

方法-C语言头文件里放声明,其实现放哪?

问题描述 C语言头文件里放声明,其实现放哪? 我写了一个头文件a.h,实现在a.c中,主文件中#include "a.h",报错...我想知道头文件的声明和定义的规范使用方法..谢谢.. 解决方案 首先搞清楚,include和头文件的关系. include的作用是将这个文件的内容插入到include所在的位置,从而构成一个完整的源代码文件被编译. 那么头文件是什么,实际上头文件里可以放任何东西,源代码文件也可以放任何东西,include也可以随意包含. 只是看这三者放在一起,经过替换,

C++预编译头文件

许多初学 VC 的朋友也许都为那么一个问题困扰过:     为什么所有的 cpp 都必须 #include "stdafx.h"     也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含.可是,这到底是为什么呢?预编译头有什么用呢?     这得从头文件的编译原理讲起.其实头文件并不神秘,它的全部作用,就是把自己的所有内容直接"粘贴"到相应的 #include 语句处.如果不相信的话,不妨做个实验,将一个 cpp 中的所有 #include 语句删掉,并

c++ 嵌入式-c++有没有类似库一样的头文件,可以用于简单的图像处理

问题描述 c++有没有类似库一样的头文件,可以用于简单的图像处理 有没有一些头文件,包含后可以在Visual Studio上进行一些简单的图像处理,比如读取图像的像素,因为目前是在Visual Studio上面做实验,最终要移植到嵌入式平台,所以不能用opencv之类的库,拜托各位帮帮忙 解决方案 要移植就不能用vs自带的类库,也不能用gdi等. 看看http://blog.pfan.cn/lym51/51427.html 解决方案二: C++ 是语言,没有这样的功能,它只提供简单的函数 复杂的

头文件和库文件

简单的说:头文件提供声明,库文件提供定义/实现.C 代码的编译过程: 预处理(需要头文件) -> 编译 -> 汇编 -> 链接(需要库文件); 执行时可能还有动态链接过程. 在早期的编程语言中Basic Fortan没有头文件的概念,c++/c语言的初学者虽然会使用头文件,但是常常不明其理.   1.通过头文件来调用库功能. 在很多场合,源代码不便(或不准)向用户公布, 只要向用户提供头文件和二进制的库即可,用户只需要按照头文件中的接口声明来调用库函数, 而不必关心接口是怎么实现的,编译

用iitao(num,buff,10)将数字转化为字符的函数之前需要声明吗?头文件是什么?

问题描述 用iitao(num,buff,10)将数字转化为字符的函数之前需要声明吗?头文件是什么? 急急急,,之前需要声明吗?头文件是什么? 用iitao(num,buff,10)将数字转化为字符的函数之前需要声明吗?头文件是什么? 解决方案 是itoa,integer to ascii的缩写 解决方案二: itoa, 用 法:char *itoa(int value, char *string, int radix); 是英文integer to array(将int整型数转化为一个字符串,

swift引入object-c头文件后,不知道怎么调用oc代码

问题描述 swift引入object-c头文件后,不知道怎么调用oc代码 1C 有段oc代码如下:typedef void(^RootViewMoveBlock)(UIView *rootViewCGRect orginFrameCGFloat xoffset);@property (copynonatomic) RootViewMoveBlock rootViewMoveBlock;//可在此block中重做动画效果 (void)setRootViewMoveBlock:(RootViewMo

c++-我在头文件中通过添加现有项添加quote.h文件后,为何include是提示错误?

问题描述 我在头文件中通过添加现有项添加quote.h文件后,为何include是提示错误? 解决方案 你试一下把头文件放在和CPP一个目录下:或者写出quote.h完整路径. 解决方案二: #include后面有没有一个空格 解决方案三: 重启编译器,,,建议重建项目再试一次