O erro que estás a ter ou é por falta de includes ou é por estares a tentar compilar código C (escrito em estilo pré-ANSI C) em modo C++.
Em C, se chamares uma função que não foi declarada, o compilador assume que ela devolve int.
Por outro lado, em C eu posso declarar uma variável assim:
Código:
a; /* esta variável é inteiro */
abc(a, b) {
/* esta função devolve inteiro e os dois argumentos a e b são inteiros. */
}
Isto são arcaísmos do tempo anterior ao ANSI C. No C++, pura e simplesmente não são admitidos.
Às vezes também acontece quando um gajo se engana no nome do tipo, por exemplo:
Código:
{
doubl a; /* o compilador vai achar que doubl há de ser uma variável de tipo int, em C++ dá o erro do default int, e depois vai ficar sem saber o que fazer com o a. */
}
Quanto aos includes, há motivos para que não estejam bem. Na antiga tradição do UNIX, certas funções (em particular o calloc, o free) estavam em headers diferentes dos actuais (malloc.h?). O ANSI C, reorganizou as coisas, criou um header, stdlib.h, que não existia no UNIX, e onde foram parar coisas que estavam espalhadas. Alguns livros antigos e alguns autores que não se actualizaram ainda escrevem com os includes pré-ANSI C (já se passaram 20 anos).
Outro motivo ainda, é que se estás a compilar em modo C++, é possível que as funções calloc, free e as outras todas estejam definidas no namespace std (é aí que o padrão C++ as define). Por compatibilidade com a tradição, a maior parte dos compiladores segue a seguinte convenção:
Código:
#include <cstdlib>
...
// Código moderno C++
int* a = reinterpret_cast<int*>(std::calloc(10, sizeof(int)));
...
Código:
#include <stdlib.h>
...
// Código arcaizante C++
int* a = (int*) calloc(10, sizeof(int));
...
Já agora, não esquecer que em C++ um ponteiro para void não se converte automaticamente para um ponteiro de outro tipo sem cast.
Agora, é difícil ajudar-te sem pores o código que ofende o compilador. Em relação aos conselhos para mudar de compilador, a questão que eu ponho é: e quando tiveres no outro compilador um problema que não sabes resolver? trocas para um terceiro?
EDIT: Se é mesmo C que estás a usar, certifica-te de que o teu ficheiro tem extensão .c e não .cpp.