簡體   English   中英

如何在多個.cpp文件中使用全局變量?

[英]How to use global variables in multiple .cpp files?

我有這個簡單的程序,試圖在一個單獨的文件中打印我的全局變量。 我正在使用Visual Studio 2013專業 IDE。

print.h

#ifndef PRINT_H_
#define PRINT_H_

void Print();

#endif

print.cpp

#include "print.h"

#include <iostream>

void Print()
{
    std::cout << g_x << '\n';
}

source.cpp

#include <iostream>
#include <limits>

#include "print.h"

extern int g_x = 5;

int main()
{
    Print();

    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();

    return 0;
}

我收到編譯器錯誤error C2065: 'g_x' : undeclared identifier

我搜索了這個論壇,但是找不到其他遇到我問題的人。 我嘗試在單獨的.cpp文件中重新聲明我的全局變量,但沒有成功。 如您所見,我已經包含了必要的標題保護,並為全局變量分配了extern關鍵字。 這是我第一次測試多個文件中的全局變量。 顯然我缺少一些簡單的東西。 我需要更改或添加什么才能使程序正常工作?

編輯:我發現本主題對理解extern和全局變量定義之間的區別很有用。

編譯器正在編譯print.cpp 在編譯print.cpp時,它對source.cpp print.cpp 因此,在編譯print.cpp時,放置在source.cpp中的g_x對您絕對沒有好處,這就是為什么會出現錯誤。

您可能想做的是

1)放置extern int g_x; print.h內部。 然后,編譯器將在編譯print.cpp時看到g_x

2)在source.cpp ,從g_x的聲明中刪除extern

int g_x = 5;

將您的全局聲明移到公共標頭,例如common.h

#ifndef COMMON_H_
#define COMMON_H_

extern int g_x;   //tells the compiler that g_x exists somewhere

#endif

print.cpp

#include <iostream>

#include "print.h"
#include "common.h"

void Print()
{
    std::cout << g_x << '\n';
}

source.cpp

#include <iostream>
#include <limits>

#include "print.h"
#include "common.h"

int g_x;

int main()
{
    g_x = 5;   //initialize global var
    Print();

    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();

    return 0;
}

在其他.cpp文件中,您可以訪問g_x包括common.h標頭)。

extern int g_x;

屬於.h,您需要添加

int g_x =5; 

到一些.cpp。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM