我正在做一个有很多功能的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最后,我有了主程序mainpro.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:‘Array’没有命名类型
然后在add.cpp函数中出现一个错误,指出错误A没有声明。
如何将闪电战数组声明为全局?谢谢你`
发布于 2012-05-19 23:45:42
问题是,用于导入名称空间(BZ_USING_NAMESPACE)的宏低于globals.h的include。因此,您尝试在globals.h中引用的Array类实际上是blitz::Array或其他什么。
要获得一个简单的修复方法,只需在您对A的声明上方使用globals.h中的BZ_USING_NAMESPACE即可。
请始终记住在头文件中包含头文件所需的所有内容。
#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);
#endifhttps://stackoverflow.com/questions/10666618
复制相似问题