0

我有一个类项目与用户定义的对象类型的数组有关。我的 ChemicalData.cpp 文件中的所有函数(最终会更多)都需要能够访问这个数组。所以有问题的数组在我的头文件中,使用“extern”语法。

#include <string>
#include "Chemical.h"

const int ARRAY_SIZE = 2000; 
extern Chemical chemArray[ARRAY_SIZE];

void start();
void arrayMethod(Chemical[]);

在我的 cpp 文件中,我创建了数组并调用了一个函数。

#include "ChemicalData.h"
#include "Chemical.h"
#include <string>
using namespace std;


void start()
{
    Chemical chemArray[ARRAY_SIZE];

    arrayMethod(chemArray);
}

void arrayMethod(Chemical[] chemArray)
{
    Chemical chem1 = Chemical();
    chemArray[i] = chem1;
}

这是我的 Chemical.h:

#include <string>
#if !defined(CHEMICAL_H)
#define CHEMICAL_H
using namespace std;

class Chemical
{ 
private:
    string chem;

public:
    Chemical();
};
#endif

和 Chemical.cpp 很好的衡量标准:

#include "Chemical.h"
#include <string>
using namespace std;

string chem;

Chemical::Chemical()
{
  chem = "";
}

但是编译器会抛出“未定义对 'chemArray' 的引用”的错误。我究竟做错了什么?

4

3 回答 3

6
void start()
{
    Chemical chemArray[ARRAY_SIZE];

    arrayMethod(chemArray);
}

chemArray是本地启动功能将其移出功能。

Chemical chemArray[ARRAY_SIZE];

void start()
{
    arrayMethod(chemArray);
}

边注; 全局变量不好,因此您可能希望将这些东西包装在一个类中,并使该数组成为该类的实例成员。

于 2013-03-25T21:45:46.530 回答
3

您不能将 ChemArray 是函数内部的临时变量,extern 用于全局变量。由于每次进入函数都会有一个新的 chemArray.. 将其移到函数外部就可以了:

Chemical chemArray[ARRAY_SIZE]; 

void start()
{

    arrayMethod(chemArray);
}
于 2013-03-25T21:45:58.623 回答
-1

你不能把 ChemicalchemArray[ARRAY_SIZE]放在你的头文件中吗?然后转发声明?

于 2013-03-25T21:47:16.753 回答