我知道它不是很好,但我需要在我的程序中跨多个文件的全局变量。这些是我的图形窗口的变量:
我知道我可以创建一个.h
文件并声明所有变量:
#pragma once
extern std::string GameName;
extern sf::RenderWindow Window;
extern std::string Status;
然后我想在我的main.cpp
中定义我的变量,因此所有文件都可以访问这些值。但除非它们在int main()
循环中,否则我无法定义它们。还有其他方法,所以我可以在主循环中定义这些变量吗?
修改
使用Visual Studio 2017。 错误:
LNK2001未解析的外部符号“class sf :: RenderWindow Window” (?Window @@ 3VRenderWindow @ sf @@ A)立方体 库C:\ Users \ George \ Documents \ C ++ \ Files \ Libraries \ Cubes Library \ Cubes Library \ Cubes Library.obj 1
。
LNK2001未解析的外部符号“类 的std :: basic_string的,类 std :: allocator>状态” (?状态@@ 3V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ A)立方体 库C:\ Users \ George \ Documents \ C ++ \ Files \ Libraries \ Cubes Library \ Cubes Library \ Cubes Library.obj 1
LNK1120 2未解析的外部多维数据集 库C:\ Users \ George \ Documents \ C ++ \ Files \ Libraries \ Cubes Library \ Debug \ Cubes Library.dll 1
答案 0 :(得分:1)
您可以在main.cpp文件中声明它们,但为了使它们可以全局访问,您必须在main函数/循环之外定义它们。如果在主函数/循环中对它们进行十分转换,则它们是局部变量,并且不能(轻松)全局访问。这样做,结合你建议的头文件就可以了。
// Global variables...
std::string GameName;
sf::RenderWindow Window;
std::string Status;
int main()
{
return 0;
}
您也可以将它们放在另一个文件中,例如globals.cpp。
答案 1 :(得分:1)
你会这样做......
文件:Main.h
#ifndef __MAIN_H__
#define __MAIN_H__
#include <string>
extern std::string GameName;
//extern sf::RenderWindow Window;
extern std::string Status;
#endif
文件:Main.cpp
#include "stdafx.h"
#include <iostream>
#include "Main.h"
std::string GameName;
//sf::RenderWindow Window;
std::string Status;
extern void foo(); // Function Prototype
int main()
{
GameName = "none";
Status = "none";
foo();
std::cout << GameName << " - " << Status << std::endl;
std::cout << "(HIT A KEY TO CONTINUE)" << std::endl;
getchar();
return 0;
}
文件:Other.cpp
#include "stdafx.h"
#include "Main.h"
void foo()
{
// Global variables declared in Main.cpp are now accessible here
GameName = "Horizon New Dawn";
Status = "Finished";
}
答案 2 :(得分:1)
这是在DLL中使用全局变量的方法。
//文件:DLLGlobals.h
// This file is used in the DLL project
#ifndef __GLOBALS_H__
#define __GLOBALS_H__
#include <string>
extern "C"
{
extern __declspec(dllexport) std::string GameName;
extern __declspec(dllexport) std::string Status;
}
#endif//__GLOBALS_H__
//文件:DLLGlobals.cpp
#include "stdafx.h"
#include "DLLGlobals.h"
extern "C"
{
// Define Global Variables (no C++ mangling)
__declspec(dllexport) std::string GameName = "Dishonored 2";
__declspec(dllexport) std::string Status = "Not Started";
}
//文件:DLL.h
#ifndef __DLL_H__
#define __DLL_H__
// This file is included by code using the DLL project
#include <string>
extern "C"
{
__declspec(dllimport) std::string GameName;
__declspec(dllimport) std::string Status;
}
#endif//__DLL_H__
// File:Main.cpp
#include "stdafx.h"
#include <iostream>
#include "Main.h"
#include "<path_to_dll_header>\DLL.h"
int main()
{
std::cout << GameName << ": " << Status << std::endl;
std::cout << "(HIT A KEY TO CONTINUE)" << std::endl;
getchar();
return 0;
}