error C2143: syntax error : missing ';' before 'tag::id'的两种情况

本文介绍了C++编译时出现errorC2143的两种常见原因:一是类定义末尾缺少分号,二是静态成员变量外部初始化时类型标识不明。通过具体代码示例,帮助读者理解并避免这些错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

error C2143: syntax error : missing ';' before 'tag::id'的两种情况
2008年10月23日 21:25

出现这种问题可能的情况有:

1.定义的类最后的括号后面没有加;这是error C2143最简单的一种错误。

2.举例说明较隐蔽的一种情况:

A.h:

class A

{

A();

~A();

typedef struct p{

     int s;

     int t;

                    }*q;

static q ptr;

};

A.cpp:

...

#include "A.h"

....

A::A()

{}

q      A::ptr=NULL;//必须在类外初始化静态成员变量ptr

....

编译...

出错:error C2143: syntax error : missing ';' before 'tag::id'

咋一看什么问题也没有啊,类后面也有分号,头文件也包含了,这是怎么或事呢???

细心一点地检查,你会发现初始化静态成员变量ptr的时候是在类外,那么q是什么?编译器自然不知道,所以q是类A的q,这里必须加上A::。改成A::q A::ptr=NULL后编译通过。

第二中情况比较隐蔽,曾让我抓狂好长时间。

总之,error C2143这类错误,一般都是粗心造成的,所以编程是个细活,得细心了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值