c++-我在头文件里声明一个变量,然后在Cpp里赋值,怎么不行呢?

问题描述

我在头文件里声明一个变量,然后在Cpp里赋值,怎么不行呢?

我的mfc程序里自定义了一个头文件,里面声明一个变量比如 int a和声明一个函数Init();
然后自定义一个cpp,里面实现函数Init()。在函数体里面给a赋值:a=6;
然后在另一个dialog cpp里TRACE这个值试试,结果说: fatal error LNK1169: 找到一个或多个多重定义的符号,已经在...obj中定义过。反正编辑时不报错,编译链接时报错。怎么回事?
我有很多变量,我希望有一个Init函数,点击按钮时给这些变量赋值,以前是直接写在onclick事件中的,但不想点击一次就重新建立一次这些变量并赋值,感觉不是一个优化的写法。大神们怎么看?

解决方案

你在h文件中写int a;那个是定义不是申明。把整个写到cpp文件中。头文件中写extern int a;

解决方案二:

看看吧
这里写的很好
http://blog.csdn.net/chenqiai0/article/details/8490665

解决方案三:

在头文件中定义,会产生重复定义的错误
2种解决方法
1、在源文件定义,头文件声明
2、静态变量 static

解决方案四:

在头文件中定义,会产生重复定义的错误
2种解决方法
1、在源文件定义,头文件声明
2、静态变量 static

解决方案五:

头文件不要重复包含,加上#pragma once
如果是全局变量,其他需要用到的地方extern

解决方案六:

头文件重复包含了
头文件中加上#pragma once

时间: 2024-07-31 00:00:39

c++-我在头文件里声明一个变量,然后在Cpp里赋值,怎么不行呢?的相关文章

嵌入式软件-比较大的项目中,头文件中声明的变量和函数一般不太好确定前面是不是要加extern把

问题描述 比较大的项目中,头文件中声明的变量和函数一般不太好确定前面是不是要加extern把 比如这个.h文件中他用了一个ifdef,这个只是一个类似一个标志吧,任何程序里面都可以这样用吗,这是比较好的方式吗 解决方案 这是查看宏定义,判断是否define了这个宏.然后决定后面的各种定义.以endif结尾 解决方案二: ifdef你可以看做if..extern表示你函数定义在别的文件里.这里应该是为了防止冲突,通过宏值,决定是否是用本类中的该函数还是其他文件的相同命名的函数(起函数功能可能有所区

C++的头文件中类声明后忘记加分号产生不可预期的编译错误

头文件 Test.h 的内容是 class Test { public: virtual void test1(); } 实现文件是 Test.cpp #include "Test.h" #include <iostream> using namespace std; void Test::test1(){ cout<<"Hello"<<endl; } 编译时出现错误 c:\program files\microsoft visu

引用函数-c++怎么在view里的一个函数引用的函数里再引用一个函数?

问题描述 c++怎么在view里的一个函数引用的函数里再引用一个函数? 下面第一个函数就是我想要在第二个函数里面用的,而第二个函数是第一个引用的 void CZHANGMIN1View::InsertSort(unsigned char pArray, int iLength) { unsigned char tmp; int i, j; for(i = 1; i < iLength; i++) { j = i-1; tmp = pArray[i]; while(j >= 0 &&am

我在VS2010中引用外部的头文件,提示找不到源文件“.cpp”

问题描述 我在VS2010中引用外部的头文件,提示找不到源文件".cpp" 我已经将头文件和.cpp文件所在路径添加至 "VC++ -->包含目录"和 "VC++-->库目录"里面.并且在工程中 include了要用的头文件,但报错显示"fatal error C1083: 无法打开源文件:"DataDefine.cpp": No such file or directory".希望大牛帮忙~

visual studio-VS2013中添加头文件路径(系统环境变量)的问题

问题描述 VS2013中添加头文件路径(系统环境变量)的问题 我现在的头文件路径是D:/demo/abc/include 使用绝对路径就没问题 但是一旦使用了系统的环境变量就不行了求解~~~ 解决方案 系统环境变量,VS是不支持的,它有自定义的宏,你可以查看添加目录中,展开看看.当然你也可以在属性页中自己定义其他的宏,然后工程中引用 解决方案二: http://m.blog.csdn.net/blog/qweewqpkn/43485577 解决方案三: 对的,一般设置完环境变量,需要重新注销或者

方法-C语言头文件里放声明,其实现放哪?

问题描述 C语言头文件里放声明,其实现放哪? 我写了一个头文件a.h,实现在a.c中,主文件中#include "a.h",报错...我想知道头文件的声明和定义的规范使用方法..谢谢.. 解决方案 首先搞清楚,include和头文件的关系. include的作用是将这个文件的内容插入到include所在的位置,从而构成一个完整的源代码文件被编译. 那么头文件是什么,实际上头文件里可以放任何东西,源代码文件也可以放任何东西,include也可以随意包含. 只是看这三者放在一起,经过替换,

(一〇九)单独编译(多个源代码文件和头文件)

单独编译的简单原理: C++在内存中储存数据提供了多种选择.   可以选择数据保留在内存中的时间长度(存储持续性)以及程序的哪一部分可以访问数据(作用域和链接)等.可以使用new来动态地分配内存,而定位new运算符提供了这种技术的一种变种.C++名称空间是另一种控制访问权的方式.   通常,大型程序都由多个源代码文件组成,这些文件可能共享一些数据.这样的程序涉及到文件的单独编译.     ----***一〇九谈的是单独编译***一一〇谈的是存储***------   和C语言一样,C++也允许,

C/C++ 头文件作用

最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是比较模糊的,只是之前的使用大多比较简单,并没有牵涉到太复杂的工程,所以定义和声明还是比较简单而明了了的.但是最近的大工程让我在这方面吃到了一点点苦头,虽然看了别人的代码能够很快的改正,但是这些改正背后的原因却不知道.我想大多数喜欢C语言的程序员应该是和我一样的,总喜欢去追究程序问题背后的底层原因,而这

C++中头文件和源文件详细介绍

C++中的头文件和源文件详解 一.C++编译模式 通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码. C+ +语言支持"分别编译"(separate compilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要