没有命名类型错误(使用全局类)
does not name a type error (using global class)
我必须使我的类全局(知道这不是一个很好的风格,但我想在其他函数中使用我的类)。
编译后,我得到以下错误:' Test_Class '没有命名类型。
代码如下:
main.cpp:
#include "class_header.h"
#include "header.h"
Test_Class Test1, Test2, Test3;
int main(){
}
class_header.h:
#ifndef CLASS_HEADER_H
#define CLASS_HEADER_H
class Test_Class {
public:
int get_a() const;
int get_b() const;
private:
int test_a;
int test_b;
int test_c;
};
#endif // CLASS_HEADER
header.h:
#ifndef HEADER_H
#define HEADER_H
extern Test_Class Test1, Test2, Test3;
void test_source(int a, int b);
#endif // HEADER_H
source.cpp:
#include "header.h"
void test_source(int a, int b){
}
我在main中定义了这个类,所以我不理解错误信息。谢谢你的帮助。
header.h
中的extern Test_Class Test1, Test2, Test3;
行需要声明Test_Class
:这在编译source.cpp
时是看不到的。
一种补救方法是在source.cpp
的最开头添加#include class_header.h
。
您的文件header.h
强烈依赖于class_header.h
,因为您使用了Test_Class类。因此,您应该在header.h
文件中包含class_header.h
。
#ifndef HEADER_H
#define HEADER_H
#include class_header.h
extern Test_Class Test1, Test2, Test3;
void test_source(int a, int b);
#endif // HEADER_H
任何其他的解决方案都是脆弱的。任何客户端如果没有按照正确的顺序布局头文件将会出现问题。
还可以简化main.cpp
#include "header.h"
Test_Class Test1, Test2, Test3;
int main(){
}
您需要在模块source.cpp:
中包含标题class_header.h:
,然后才包含标题header.h:
。否则编译器不知道声明
Test_Class
是什么意思extern Test_Class Test1, Test2, Test3;
或者你应该这样写声明
extern class Test_Class Test1, Test2, Test3;
相关文章:
- 使用全局声明的向量时,C++双重释放错误/损坏
- 全局向量导致 C++ 程序结束时出现段错误
- 跨多个类的全局变量而不会出现重定义错误?
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 对象指针 c++ 的全局向量错误
- Catalina C++:使用<cmath>标头产生错误:全局命名空间中没有名为 'signbit' 的成员
- 为什么自删除的全局 Vulkan 实例仅在添加层时才导致段错误?
- 声明为私有成员的互斥会生成错误,但在全局时不会生成错误
- 剪贴板数据上使用的全局大小函数会导致错误
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 在VS代码中使用全局变量时出现"undefined reference to"错误
- GUI QT全局变量错误
- 指向全局运算符的函数指针在 VC++ 上编译,而 clang 给出错误
- JNI检测到应用程序中的错误:使用已删除的弱全局参考
- 全局变量错误C
- 在vs2010中使用iostream时,出现错误C2039:'exit':不是"全局命名空间"的成员
- 将大小设置为结构类型全局变量时发生编译器错误
- 运算符重载:简单添加...错误 C2677:二进制"+":未找到采用类型 ___ 的全局运算符(或者不存在可接受的转换)
- C++错误代码全局命名空间
- 全局常量字符*上的错误LNK1169