c++ class “xxxx“ does not name a type
c++ class “xxxx“ does not name a type
目录
c++ class “xxxx“ does not name a type是怎么一回事
C++编译报错:does not name a type
-------------------------------------------------------------
C++编译报错:does not name a type
https://blog.csdn.net/weixin_43919570/article/details/113833141
前置声明(forward declaration)
[C++] does not name a type
https://www.cnblogs.com/cjdty/p/14638288.html
从网上找到了以下几点 https://blog.csdn.net/fly20180712/article/details/88306008
1、没有加调用函数的头文件
2、不存在xxx命名空间
3、包含头文件,但是调用的时候,类名写错了
但是我睁大了眼睛也没看到错误在哪里,直到后来注意到我似乎出现了循环定义。
===================================
c++ class “xxxx“ does not name a type是怎么一回事
declare class does not name a type
出现这个编译错误,
主要有四个可能原因,现总结如下:
1. 引用的类命名空间未包含
2. 引用的类头文件未包含
3. 包含了头文件,或者已经前置声明了,则说明所引用的类名写错。
4. 循环引用头文件 //一种方法,将头文件拆分?
前置声明要素:
1.前置声明需要注意以上提到的四点
2.尽可能的采用前置声明(做到只有包含继承类的头文件)
3.使用前置声明时,cpp文件中include 头文件次序必须先 包含前置声明的类定义头文件,再包含本类头文件。
否则会出现如下编译错误.
(expected constructor, destructor, or type conversion before ‘typedef')
https://blog.csdn.net/typename/article/details/7173550
原因二 前置声明
XXX应该是一种用户定义的数据类型,而由于没有声明或者拼写错误或者与关键词重名,导致编译有错,出现类型错误。
在一个源文件中,要声明或定义一个类的指针时,必须在使用前声明或定义该类,因此下面的代码会报错:class A{public: B *b;};class B{public: A *a;};int main(){ return 0;}12345678910111213141516
报错为“error: ‘B’ does not name a type”,就是因为在A类中使用B *b之前没有声明或定义B类,如果在第一行加上一句前置声明(forward declaration)“class B;”,就不会有这样的问题了。
class appv_forward; //forward declaration 前置声明
class obu_data_channel_t {
public:
而在头文件互相包含时,也会引发“error: ‘xxx’ does not name a type”,其报错原因和上面的代码是相同的,
请看下面的代码:
a.h:
#ifndef A_H_INCLUDED
#define A_H_INCLUDED
#include "b.h"
class A{
public:
B *b;
};
#endif // A_H_INCLUDED
b.h:
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
#include "a.h"
class B{
public:
A *a;
};
#endif // B_H_INCLUDED
main.cpp:
#include "a.h"
#include "b.h"
int main()
{
return 0;
}
编译就会报错:“error: ‘A’ does not name a type”。
预处理命令为“gcc -E -o a.i a.h”:
# 1 "a.h"# 1 "<built-in>"# 1 "<command-line>"# 1 "a.h"# 1 "b.h" 1# 1 "a.h" 1# 5,"b.h" 2class B{public: A *a;};
# 5 "a.h" 2class A{public: B *b;};1234567891011121314151617181920212223242526。
————————————————
版权声明:本文为CSDN博主「aFakeProgramer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/usstmiracle/article/details/106026446
更多推荐
所有评论(0)