加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C程序中实现全局结构

发布时间:2020-12-16 10:16:33 所属栏目:百科 来源:网络整理
导读:我正在尝试创建全局结构,这将从源代码的任何部分看出.我需要它用于我的大型Qt项目,需要一些全局变量.这是:3个文件(global.h,dialog.h main.cpp).对于编译,我使用Visual Studio(Visual C). global.h #ifndef GLOBAL_H_#define GLOBAL_H_typedef struct TNumb
我正在尝试创建全局结构,这将从源代码的任何部分看出.我需要它用于我的大型Qt项目,需要一些全局变量.这是:3个文件(global.h,dialog.h& main.cpp).对于编译,我使用Visual Studio(Visual C).

global.h

#ifndef GLOBAL_H_
#define GLOBAL_H_

typedef struct  TNumber {
    int g_nNumber;
} TNum;

TNum Num;

#endif

dialog.h

#ifndef DIALOG_H_
#define DIALOG_H_

#include <iostream>
#include "global.h"

using namespace std;

class   ClassB {
public:
    ClassB() {};

    void    showNumber() {
        Num.g_nNumber = 82;
        cout << "[ClassB][Change Number]: " << Num.g_nNumber << endl;
    }
};

#endif

和main.cpp

#include <iostream>

#include "global.h"
#include "dialog.h"

using namespace std;

class   ClassA {
public:
    ClassA() {
        cout << "Hello from class A!n";
    };
    void    showNumber() {
        cout << "[ClassA]: " << Num.g_nNumber << endl;
    }
};

int main(int argc,char **argv) {
    ClassA  ca;
    ClassB  cb;
    ca.showNumber();
    cb.showNumber();
    ca.showNumber();
    cout << "Exit.n";
    return 0;
}

当我试图构建这个小应用程序时,编译工作正常,但链接器给我一个错误:

1> dialog.obj:错误LNK2005:“struct TNumber Num”(?Num @@ 3UTNumber @@ A)已在main.obj中定义

有没有解决方案?

谢谢.

解决方法

是.首先,不要在头文件中定义num.在标题中将其声明为extern,然后创建一个文件Global.cpp来存储全局,或者将其放在main.cpp中,如Thomas Jones-Low的回答所示.

其次,不要使用全局变量.

第三,在C中为此目的不需要typedef.您可以像这样声明您的结构:

struct  TNum {
    int g_nNumber;
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读