我有一个单独的标头文件,用于声明全局变量。我已将该标头文件包含在PCH.H中,其中包含在每个.cpp文件中。#include "variable.h"
我现在需要调用变量并在if Statment中读取它以启动一些代码。在编译之前,在Visual Studio中没有显示错误。但是,当我编译代码时,它会返回错误:
Error LNK2005 "bool ahschecked" (?ahschecked@@3_NA) already defined in checkin.xaml.obj pch.h
变量为" Ahschecked",它是类型的布尔值,我试图从IS checkin.xaml.obj读取全局变量的文件,该变量的原始声明是在pch.h
中这在Windows表单之前起作用,但是当我转到UWP时,我无法使其工作。
我已经用一个较小的程序重新创建了这个问题。
var.h(存储全局变量)
#pragma once
extern bool globalbool = false;
#pragma endregion
pch.h(每一个.cpp中都包含在每个.cpp中)
#pragma once
#include <collection.h>
#include <ppltasks.h>
#include "App.xaml.h"
#include "var.h"
mainpage.xaml.cpp(尝试从全局var读取)
#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
}
}
我猜你没有将全局变量声明为 extern
,但没有看到任何代码,就很难确定。
您应该声明您的全局变量为标题文件中的extern
,然后在一个源文件中,您还应定义 没有extern
的全局变量。
这种声明和定义全局变量的方式对于任何C 程序都是正确的。无论您是编写Windows表单程序还是UWP程序,都没有区别。
由于您有一个用于全局变量声明的标头文件,因此也有一个用于全局变量定义的源文件也很有意义。
我能够通过在没有任何值附加的任何值的情况下声明标题文件中的全局变量来解决此问题>