c++ - 全局多维数组未写入 [vs c++]

标签 c++ visual-studio-2008 multidimensional-array global-variables

我有一个全局多维数组,g_iAllData[MAX_LEN][MAX_WIDTH] 在表单中使用。当我在函数中写入时:g_iAllData[iRow][iColumn]= iByte_Count; 我可以在监 window 口中看到它的内容没有被更改。如果我把数组放在函数中,它就可以正常工作。

有什么我想念的吗?我在 Form1.h 文件顶部的 #include 之后将其声明为全局的。我有多个函数被按下的按钮调用,我需要在每个函数中写入和读取数组。将它保持为全局而不是将它传递给每个函数会更容易。

更新代码:

程序名.cpp

#include "stdafx.h"
#include "Form1.h"  

Form1.h

#include <iostream>
#include <string>
...
#pragma once  

const int MAX_LEN = 4033;
const int MAX_WIDTH = 21;
int g_iAllData[MAX_LEN][MAX_WIDTH];    
...
namespace ProgramName{
// later on
ReadFile();  

无效读取文件(无效)

g_iAllData[iRow][iColumn]= iByte_Count;

最佳答案

您的代码示例确实证实了您的变量声明存在问题。

正如@Graham 所暗示的,定义全局变量的正确方法是:

  • 在cpp文件中定义变量
  • 在头文件中将变量声明为extern

//ProgramName.cpp

#include "stdafx.h"
#include "Form1.h"  

int g_iAllData[MAX_LEN][MAX_WIDTH];    

//Form1.h

#include <iostream>
#include <string>
...
#pragma once  

const int MAX_LEN = 4033;
const int MAX_WIDTH = 21;
extern int g_iAllData[MAX_LEN][MAX_WIDTH];    

这样链接器将在一个编译单元中找到全局变量的定义,并且在所有其他#include 头的编译单元中,它将能够将 extern 声明链接到正确的变量定义。

除此之外,可能会发生奇怪的事情:您可能会收到提示多个变量定义的神秘链接器错误消息,或者您甚至可能在您的应用程序中获得多个不同的变量而不是一个全局变量 - 后者解释了为什么您的方法没有似乎改变了变量的内容。

关于c++ - 全局多维数组未写入 [vs c++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609958/

相关文章:

c++ - 与 typename 混淆,因此出现错误

c++ - 仅 header 库的配置 (C++)

visual-studio-2008 - VC++ 2008/2010 能否在同一代码上轻松使用?

c++ - 这样的c++工具存在吗? [我不知道怎么调用它]

JavaScript 数组减少到子数组的总长度 - 为什么这不起作用?

c++ - 从不同进程可靠地写入同一文件

c++ - 将项目添加到 QGraphicsItemGroup 使其不可见

visual-studio-2008 - Visual Studio 2008 文档

c# - 多维数组枚举器是否保证所有实现的顺序相同?

C++:如何为多维 vector 创建构造函数?