【问题标题】:Blitz++ arrays as global arraysBlitz++ 数组作为全局数组
【发布时间】:2012-05-19 15:40:54
【问题描述】:

我正在开发一个具有许多功能的 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 未声明。

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

【问题讨论】:

    标签: c++ global-variables blitz++


    【解决方案1】:

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

    对于一个简单的修复,只需使用 globals.h 中 A 声明上方的 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);
    #endif
    

    【讨论】:

    • 我按照您的建议对 globals.h 文件进行了更改,并且在主程序和添加函数中将 BZ_USING_NAMESPACE 宏放在#include "globals.h" 上方。但是现在我收到以下错误(写在下一条评论中)
    • 在 mainprog.cpp:7:0 中包含的文件中:globals.h:8:25:警告:“A”已初始化并声明为“extern”在 add.cpp:5:0 中包含的文件中:globals.h:8:25:警告:“A”已初始化并声明为“extern”在 globals.cpp:5:0 中包含的文件中:globals.h:8:25:警告:“A”已初始化并声明为“extern” ' globals.cpp:9:18: 错误: 重新定义 'blitz::Array A' globals.h:8:25: error: 'blitz::Array A' 之前在这里声明
    • @SthitadhiRoy 我认为您需要摆脱 globals.h 中的构造函数调用(只需保留它extern Array&lt;double,2&gt; A;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多