2014-12-17 4 views
2

Я пытаюсь создать функцию, которая возвращает тип mpfr_t, но я получаю ошибку в ее объявлении. Объявление заголовка файла выглядит (mpfr.h местное):Ошибка объявления функции mpfr_t

#include "include/mpfr.h" 
mpfr_t calcWinProb(int x); 

Но когда я пытаюсь скомпилировать я получаю следующее сообщение об ошибке:

error: âcalcWinProbâ declared as function returning an array 

Любые идеи?

+0

по нескольким причинам, возвращаемое значение из функции должно быть встроенным типа C или указатель на тип пользователя (например, массив или структуру) Что вы компилятор говорят это. что функция пытается вернуть целый массив, а не указатель на массив. Также предположите, что переданный параметр является указателем на массив и просто возвращает индикацию успеха/отказа – user3629249

ответ

3

языка C не позволяет массив как тип возвращаемого значения, который mpfr_t определенно является:

typedef __mpfr_struct mpfr_t[1]; 

Отсносящийся к N1570 (C11 проект) 6.7.6.3/1функции declarators (включая прототипы):

A function declarator shall not specify a return type that is a function type or an array type.

Это нарушение ограничения, поэтому ваш компилятор обязан диагностировать (например, ошибка при компиляции).

Whay вы можете сделать о нем заменить mpfr_t с mpfr_ptr (указатель на структуру) типа или перепроектировать декларацию, так mpfr_t является одним из параметров (может быть первым), а затем, что тип возвращаемого значения, которые могут быть void в таком случае. Последнее решение кажется более последовательным с MPFR API.

0

Я не эксперт, но вместо этого я создал функцию, которая принимает указатель на mpfr_t в качестве аргумента, поэтому вы можете вернуть туда значения. Например:

#include <stdio.h> 
#include <mpfr.h> 

void return_one(mpfr_t *num) { 
    mpfr_set_ui(*num,1,MPFR_RNDN); 
} 

int main() { 
    mpfr_t num; 
    mpfr_init2(num,512); 
    return_one(&num); 
    mpfr_printf("%.5Rf\n",num); 
    mpfr_clear(num); 
    return 0; 
} 
Смежные вопросы