Я пишу функцию с использованием 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
и хотите распечатать их, используя af_print(C)
выдаёт ошибку:
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
заявление.Переменные в одной области доступны только в текущей области и вложенных областях. Они просто не существуют в параллельных областях или областях более высокого уровня.
Более «графически» это можно увидеть примерно так:
+---------------------+ | Глобальная сфера | | | | + ----------------- + | | | Область действия функции | | | | | | | | + ------------- + | | | | | Блок сфера | | | | | + ------------- + | | | | | | | | + ------------- + | | | | | Блок сфера | | | | | + ------------- + | | | + ----------------- + | | | | + ----------------- + | | | Область действия функции | | | | | | | | + ------------- + | | | | | Блок сфера | | | | | + ------------- + | | | + ----------------- + | + --------------------- +
На рисунке выше показаны две области действия. Переменные, объявленные в одной из областей действия функции, не могут использоваться никакими другими областями функций, они местный к этой функции.
То же самое с областью блока, переменные, объявленные в блоке, могут использоваться только в этом блоке и дочерних элементах этого блока.
Теперь о том, как это относится к вашей проблеме: переменные 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
) и возвращая экземпляр этой структуры.