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

时间:2014-05-19 09:26:06

标签: c++

我必须让我的课程全球化(知道它不是一个好的风格,但我也想在其他功能中使用我的课程。)

编译后我得到以下内容:错误:'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中定义了这个类,所以我不理解错误信息。谢谢你的帮助。

3 个答案:

答案 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;