1

我正在开发一个具有许多功能的 C++ 项目。我不想将它们写在主程序中,而是想为每个函数编写一个单独的 .cpp 文件。这些函数中的大多数都将作用于某些数组,因此我希望将这些数组设为全局。因此,我在一个名为 globals.cpp 的单独 .cpp 文件中声明了所有数组,并将它们放入以 extern 为前缀的 globals.h 文件中。我像往常一样编写了函数和主程序,但是当我编译时,我得到了一个

这是我所拥有的:

//globals.cpp

#include <iostream>
#include <blitz/blitz.h>
#include <blitz/array.h>
#include "prototype.h"
#include "globals.h"

BZ_USING_NAMESPACE(blitz)

Array<double,2> A(5,5);

在 globals.h 文件中我有

#ifndef GLOBALS_H
#define GLOBALS_H
extern Array<double,2> A(5,5);
#endif

然后我有一个函数add.cpp,例如

#include <iostream>
#include <blitz/blitz.h>
#include <blitz/array.h>
#include "prototype.h"
#include "globals.h"

BZ_USING_NAMESPACE(blitz)

void add.cpp(){
   for(int i=0;i<5;i++){
      A(i,i)=i*i;
   }
}

我显然将它包含在prototype.h文件中

#ifndef GLOBALS_H
#define GLOBALS_H
void add();
#endif

最后我有了主程序 mainprog.c

#include <iostream>
#include <blitz/blitz.h>
#include <blitz/array.h>
#include "prototype.h"
#include "globals.h"

BZ_USING_NAMESPACE(blitz)
int main(){
   add();
   cout<<A<<endl;
   return 0;
}

但是,当我编译时,我收到错误 `globals.h:6:8: error: 'Array' does not name a type

然后 add.cpp 函数中出现错误,说明未声明错误 A。

如何将闪电战阵列声明为全局?谢谢`

4

1 回答 1

1

问题是您导入命名空间(BZ_USING_NAMESPACE)的宏位于您的 globals.h 包含之下。因此,您尝试在 globals.h 中引用的 Array 类实际上是 blitz::Array 或此时的东西。

对于一个简单的修复,只需使用 globals.h 中的 BZ_USING_NAMESPACE 就在您对 A 的声明上方。

永远记住在该头文件中包含头文件所需的所有内容。

#ifndef GLOBALS_H
#define GLOBALS_H

#include <blitz/blitz.h> //No idea if the Array class needs this header.
#include <blitz/array.h>
BZ_USING_NAMESPACE(blitz)

extern Array<double,2> A(5,5);
#endif
于 2012-05-19T15:45:41.670 回答