![](/img/trans.png)
[英]sharing global variables across multiple .cpp files (visual studio 2015)
[英]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.