繁体   English   中英

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

[英]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中定义了该类,所以我不理解错误消息。 感谢帮助。

extern Test_Class Test1, Test2, Test3; header.h需要声明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(){

}

您需要在标头header.h:之前的模块source.cpp:包含标头class_header.h: 否则,编译器不知道声明中的Test_Class是什么意思

extern Test_Class Test1, Test2, Test3;

或者您应该通过以下方式编写声明

extern class Test_Class Test1, Test2, Test3;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM