首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为全局数组的Blitz++数组

作为全局数组的Blitz++数组
EN

Stack Overflow用户
提问于 2012-05-19 23:40:54
回答 1查看 796关注 0票数 1

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

这就是我所拥有的:

//globals.cpp

代码语言:javascript
复制
#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文件中,我有

代码语言:javascript
复制
#ifndef GLOBALS_H
#define GLOBALS_H
extern Array<double,2> A(5,5);
#endif

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

代码语言:javascript
复制
#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文件中

代码语言:javascript
复制
#ifndef GLOBALS_H
#define GLOBALS_H
void add();
#endif

最后,我有了主程序mainpro.c

代码语言:javascript
复制
#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:‘Array’没有命名类型

然后在add.cpp函数中出现一个错误,指出错误A没有声明。

如何将闪电战数组声明为全局?谢谢你`

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 23:45:42

问题是,用于导入名称空间(BZ_USING_NAMESPACE)的宏低于globals.h的include。因此,您尝试在globals.h中引用的Array类实际上是blitz::Array或其他什么。

要获得一个简单的修复方法,只需在您对A的声明上方使用globals.h中的BZ_USING_NAMESPACE即可。

请始终记住在头文件中包含头文件所需的所有内容。

代码语言:javascript
复制
#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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10666618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档