簡體   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