使用 arrayfire 的未声明标识符
undeclared identifier using arrayfire
我像这样使用 arrayfire 编写了一个函数:
int ABC()
{
static const int Q = 5;
double A[] = { 0.0, 1.0, 0.0, 1.0, 1.0};
double B[] = { 0.0, -1.0, -1.0, 1.0, 0.0 };
array C (Q, 1, A);
array D (Q, 1, B);
return 0;
}
当我尝试在主程序中将此函数调用为:ABC()
并尝试提取变量 C
和 D
并希望使用 [=16= 打印它们时], 给出错误:
error C2065: 'C' : undeclared identifier
error C2065: 'D' : undeclared identifier
IntelliSense: identifier "C" is undefined
IntelliSense: identifier "D" is undefined
主要功能是:
#include <cstdio>
#include <math.h>
#include <cstdlib>
#include "test.h"
// test.h contains the function ABC() and
// arrayfire.h and
// using namespace af;
int main(int argc, char *argv[])
{
ABC(); // function
// here I am calling the variables defined in ABC()
af_print(C);
af_print(D);
#ifdef WIN32 // pause in Windows
if (!(argc == 2 && argv[1][0] == '-')) {
printf("hit [enter]...");
fflush(stdout);
getchar();
}
#endif
return 0;
}
请提供任何解决方案。
此致
在 C 中,基本上可以定义三个作用域变量:
- 全局范围,当变量在任何函数之外定义时。
- 局部作用域,当在函数中声明变量时,此作用域包括函数参数。
- 块范围,这适用于嵌套在函数中的块中定义的变量,例如在
if
语句的主体中。
一个作用域中的变量只在当前作用域和嵌套作用域中可用。它们根本不存在于并行作用域或更高级别的作用域中。
更多"graphically"可以看到这样的东西:
+---------------------+
| Global scope |
| |
| +-----------------+ |
| | Function scope | |
| | | |
| | +-------------+ | |
| | | Block scope | | |
| | +-------------+ | |
| | | |
| | +-------------+ | |
| | | Block scope | | |
| | +-------------+ | |
| +-----------------+ |
| |
| +-----------------+ |
| | Function scope | |
| | | |
| | +-------------+ | |
| | | Block scope | | |
| | +-------------+ | |
| +-----------------+ |
+---------------------+
上图中,有两个函数作用域。在一个函数作用域中声明的变量不能被任何其他函数作用域使用,它们是该函数的 local。
与块作用域相同,块中声明的变量只能在该块及其子块中使用。
现在说明这与您的问题有什么关系:变量 C
和 D
在函数 ABC
中定义,这意味着它们的范围在 ABC
仅函数,其他函数(如您的 main
函数)无法查看或访问 ABC
中定义的变量,这些变量在 ABC
函数的范围内是局部的。
有很多方法可以解决从其他函数访问这些变量的问题,最常见的初学者方法是将那些变量的定义放在全局范围内。然后在你分配给变量的函数中,比如
array C;
array D;
void ABC()
{
...
C = array(Q, 1, A);
D = array(Q, 1, B);
}
其他解决方案涉及通过引用传递参数并分配给它们。或者将数据放入 结构 (class
或 struct
)并返回此结构的实例。
我像这样使用 arrayfire 编写了一个函数:
int ABC()
{
static const int Q = 5;
double A[] = { 0.0, 1.0, 0.0, 1.0, 1.0};
double B[] = { 0.0, -1.0, -1.0, 1.0, 0.0 };
array C (Q, 1, A);
array D (Q, 1, B);
return 0;
}
当我尝试在主程序中将此函数调用为:ABC()
并尝试提取变量 C
和 D
并希望使用 [=16= 打印它们时], 给出错误:
error C2065: 'C' : undeclared identifier
error C2065: 'D' : undeclared identifier
IntelliSense: identifier "C" is undefined
IntelliSense: identifier "D" is undefined
主要功能是:
#include <cstdio>
#include <math.h>
#include <cstdlib>
#include "test.h"
// test.h contains the function ABC() and
// arrayfire.h and
// using namespace af;
int main(int argc, char *argv[])
{
ABC(); // function
// here I am calling the variables defined in ABC()
af_print(C);
af_print(D);
#ifdef WIN32 // pause in Windows
if (!(argc == 2 && argv[1][0] == '-')) {
printf("hit [enter]...");
fflush(stdout);
getchar();
}
#endif
return 0;
}
请提供任何解决方案。
此致
在 C 中,基本上可以定义三个作用域变量:
- 全局范围,当变量在任何函数之外定义时。
- 局部作用域,当在函数中声明变量时,此作用域包括函数参数。
- 块范围,这适用于嵌套在函数中的块中定义的变量,例如在
if
语句的主体中。
一个作用域中的变量只在当前作用域和嵌套作用域中可用。它们根本不存在于并行作用域或更高级别的作用域中。
更多"graphically"可以看到这样的东西:
+---------------------+ | Global scope | | | | +-----------------+ | | | Function scope | | | | | | | | +-------------+ | | | | | Block scope | | | | | +-------------+ | | | | | | | | +-------------+ | | | | | Block scope | | | | | +-------------+ | | | +-----------------+ | | | | +-----------------+ | | | Function scope | | | | | | | | +-------------+ | | | | | Block scope | | | | | +-------------+ | | | +-----------------+ | +---------------------+
上图中,有两个函数作用域。在一个函数作用域中声明的变量不能被任何其他函数作用域使用,它们是该函数的 local。
与块作用域相同,块中声明的变量只能在该块及其子块中使用。
现在说明这与您的问题有什么关系:变量 C
和 D
在函数 ABC
中定义,这意味着它们的范围在 ABC
仅函数,其他函数(如您的 main
函数)无法查看或访问 ABC
中定义的变量,这些变量在 ABC
函数的范围内是局部的。
有很多方法可以解决从其他函数访问这些变量的问题,最常见的初学者方法是将那些变量的定义放在全局范围内。然后在你分配给变量的函数中,比如
array C;
array D;
void ABC()
{
...
C = array(Q, 1, A);
D = array(Q, 1, B);
}
其他解决方案涉及通过引用传递参数并分配给它们。或者将数据放入 结构 (class
或 struct
)并返回此结构的实例。