Получение void* не является ошибкой типа указателя на объект, но код отлично выполняется при использовании XCode.

При выполнении следующего кода я получаю вышеупомянутую ошибку при выполнении изменения функции. Я нигде не использовал разыменование и не использовал void*. Сначала я подумал, что это из-за (двойного *) malloc(..), но даже при использовании статического выделения памяти проблема все еще сохраняется. Кроме того, компилятор говорит, что max_element не является членом std:: или "ошибка: 'max_element' не был объявлен в этой области"

#include <iostream>
#include <cmath>
#include <tgmath.h>
#include <vector>
#include <stdio.h>
using namespace std;

struct Exchange{
    int nHalf ;
    int nThird ;
    int nFourht ;
    int amDollars[3] ;
 };
void change (double n, Exchange& a) ;

// Main function for the program
int main( )
{
    int i = 0 ;
    vector <int> n ;
    n.reserve(10) ;
    vector<Exchange>coin ;
    coin.reserve(10) ;
//    n = (double *) malloc(sizeof(double)) ;
    do{
        cin >> n[i] ;
        change (n[i], coin[i]) ;
        coin[i].amDollars[0] =
        coin[i].nHalf + coin[i].nThird + coin[i].nFourht ;
        coin[i].amDollars[1] = n[i] ;
        coin[i].amDollars[2] = 0 ;
        cout << *max_element(&coin[i].amDollars[0], &coin[i].amDollars[2]) << endl ;
        i++ ;
    }while (i < 10) ;

    return 0;
}

void change (double n, Exchange& a) {

    a.nHalf = trunc(n/2) ;
    a.nThird = trunc(n/3) ;
    a.nFourht = trunc(n/4) ;

}

person Eduard Kim    schedule 08.03.2015    source источник
comment
Что ж, компилятор прав. Не похоже, что max_element объявлено в этой области, если только оно не находится в одном из заголовков.   -  person Daniel Kamil Kozar    schedule 08.03.2015
comment
Теперь я запутался, разве max_element не является просто функцией-членом, содержащейся в стандартной библиотеке?   -  person Eduard Kim    schedule 08.03.2015
comment
Это. Но вам нужно включить <algorithm>, чтобы получить его. :)   -  person Daniel Kamil Kozar    schedule 08.03.2015
comment
Кроме того, он выполняется, поэтому я предполагаю, что программа выдаст неправильный ответ, если max_element не был объявлен... Возможно, я упускаю что-то важное, поскольку я только начинаю с С++   -  person Eduard Kim    schedule 08.03.2015


Ответы (1)


Очень вероятно, что первая ошибка вызвана tgmath.h. Попробуйте заменить его на ctgmath. Или, если вам не нужно работать с комплексными числами, просто используйте cmath.

person KernelPanic    schedule 09.04.2018
comment
Также старайтесь не делать using namespace std; (особенно в глобальной области видимости), чтобы избежать конфликтов имен. Лучше явно использовать префикс std::. - person KernelPanic; 09.04.2018