我有一个单独的头文件,用于声明全局变量。我已经在每个.cpp文件中包含的pch.h中包含了该头文件。 #include "variable.h"
现在,我需要调用变量并在if语句中读取它以启动一些代码。在编译之前,Visual Studio中不会显示任何错误。但是,当我编译代码时,它返回错误:
Error LNK2005 "bool ahschecked" (?ahschecked@@3_NA) already defined in checkin.xaml.obj pch.h
变量是“ ahschecked”,它是布尔类型,而我尝试从中读取全局变量的文件是checkin.xaml.obj,该变量的原始声明在pch.h中。
这以前在Windows窗体中有效,但是当我转移到UWP时,我无法使其正常工作。
我用一个较小的程序重新创建了这个问题。
Var.h(存储全局变量的位置)
#pragma once
extern bool globalbool = false;
#pragma endregion
pch.h(自动包含在每个.cpp中)
#pragma once
#include <collection.h>
#include <ppltasks.h>
#include "App.xaml.h"
#include "var.h"
MainPage.xaml.cpp(试图从全局变量读取)
#incldue "pch.h"
#include "MainPage.xaml.h"
void testapp::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) {
if (::globalbool == false)
{
// do something
}
}
答案 0 :(得分:0)
我猜您没有将全局变量声明为extern
,但是如果没有看到任何代码,就很难确定。
您应该在头文件中以extern
声明全局变量,然后在一个源文件中还应在没有{{ 1}}。
这种声明和定义全局变量的方法对于任何C ++程序都是正确的。无论是编写Windows窗体程序还是UWP程序,都没有区别。
由于您有一个用于全局变量声明的头文件,所以也有一个用于全局变量定义的源文件。
答案 1 :(得分:0)
我能够通过在没有附加任何值的头文件中声明全局变量,然后将这些值附加到.cpp文件的外部来解决此问题。