我有一个全局多维数组,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/