2017-04-01 103 views
0

命名空间中的括号内我MainApp.XAML.h文件,我有:的Visual C++变量声明

int food; 
food = 0; 

当我编译代码时,我得到了几个错误的说法:

Error C4430 missing type specifier - int assumed 

和:

Error C2086 'int MonsterFights::food': redefinition 

但是当我谷歌如何声明一个变量,它显示了与我在做的相同的方式。

我错过了什么吗?

- 编辑 -

所以,如果我需要把我的变量在我的.cpp文件,凡在.cpp文件abouts我把它们?

目前我在这里:

MainPage::MainPage() 
{ 
    InitializeComponent(); 
} 
int food = 5; 

回答

4

有两个问题在这里:

  1. 首先,你必须在头文件中的变量定义。这意味着变量将在每个包含头文件的translation unit(大致包含所有包含的头文件的源文件)中定义。

    每个变量只能有一个单一的定义,并且在头文件中应该只有声明。移动定义一个源文件,并有一个声明,而不是在头文件:

    extern int food; 
    
  2. 的第二个问题是,你不能有一般性发言在全局范围内或在命名空间范围,只声明和定义。

    你可以通过改变你的定义(你在源文件中有一个)解决这个初始化变量:

    int food = 0; 
    

    请注意,是不是真的需要全局变量此初始化。编译器将确保否则未初始化的全局变量适合初始化为“零”,对于int变量,这意味着它们将变为0

+0

我想你的第二部分,现在我得到这个错误:'错误LNK2005 \t \t “诠释MonsterFights ::食品”(?食品@ MonsterFights @@ 3HA)在App.xaml.obj' – mast3rd3mon

+1

已经定义@ mast3rd3mon你读过第一部分了吗? –

+0

是的,还没有完全弄清楚类文件,但我理解类 – mast3rd3mon