我正在開發一個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);
在全局變量。 .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:錯誤:'Array'沒有指定類型
然後在add.cpp函數中聲明錯誤A沒有聲明。
如何將突擊陣列聲明爲全局? 謝謝 `
我所做的更改globals.h文件如你所說,並在主程序和附加功能把BZ_USING_NAMESPACE宏觀上面的#include「globals.h」。但現在我得到以下錯誤(寫在下一個評論) – lovespeed
在mainprog.cpp包含的文件中:7:0: globals.h:8:25:warning:'A'初始化並聲明爲'extern' 在文件包含在add.cpp中:5:0: globals.h:8:25:warning:'A'初始化並聲明爲'extern' 從globals.cpp包含的文件中:5:0: globals.h:8: 25:警告:'A'初始化並聲明爲'extern' globals.cpp:9:18:錯誤:重新定義'閃電::陣列 A' globals.h:8:25:error:'blitz :: Array A'先前在這裏聲明 –
lovespeed
@SthitadhiRoy我認爲你需要擺脫globals.h中的構造函數調用(只需將其保留爲'extern Array A;')。 –
Lalaland