没有命名类型错误(使用全局类)

does not name a type error (using global class)

本文关键字:全局 错误 类型      更新时间:2023-10-16

我必须使我的类全局(知道这不是一个很好的风格,但我想在其他函数中使用我的类)。

编译后,我得到以下错误:' 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;