我必须让我的课程全球化(知道它不是一个好的风格,但我也想在其他功能中使用我的课程。)
编译后我得到以下内容:错误:'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中定义了这个类,所以我不理解错误信息。谢谢你的帮助。
答案 0 :(得分:2)
extern Test_Class Test1, Test2, Test3;
中的header.h
行需要Test_Class
的声明:编译source.cpp
时看不到。
在#include class_header.h
开始时source.cpp
可以采取一种补救措施。
答案 1 :(得分:2)
由于您使用的是Test_Class类,因此您的文件header.h
在很大程度上取决于class_header.h
。
您应该在class_header.h
文件中包含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(){
}
答案 2 :(得分:1)
您需要在标题class_header.h:
之前在模块source.cpp:
中添加标题header.h:
。否则编译器不知道声明中的Test_Class
是什么意思
extern Test_Class Test1, Test2, Test3;
或者您应该按照以下方式撰写声明
extern class Test_Class Test1, Test2, Test3;