Ok. Aqui vai a lista dos problemas do seu código:
-
#include <conio.h>
Esse não é um cabeçalho do C++ padrão. O que significa que alguns compiladores podem implementa-lo, outros não. Na verdade, o conio.h foi criado pela Borland e sequer usava C++ padrão em sua estrutura. Dentro dele havia instruções específicas do compilador Borland.
-
cin.ignore(1, EOF);
EOF não é um caractere dentro de um arquivo. EOF é o valor de retorno de uma função. Não faz sentido chamar ignore nesse cara. No caso, você estaria pedindo para ignorar o caractere -1, que convertido para binário e sem sinal seria o caractere de código 255.
Simplesmente apague essa linha.
- strcopy_s
Essa função é exclusiva do Visual. Se você quiser compilar em outros compiladores, deve usar a strcpy padrão. É possível desativar o warning da MS, como explica esse artigo.
Removendo esses erro o seu código já compila no Code::Blocks e no Visual. Ele ainda não está correto, mas já estará funcional.
Um outro problema do seu código é que você mistura as APIs do C com as do C++. Existem funções e classes melhores e mais fáceis que as que você usou na Standard Library. Por exemplo, ao invés da string.h, você poderia fazer um #include <string> E usar a classe std::string.
O código também tem algumas más práticas, herdadas do C, como:
- Declarar todas as variáveis no início do método: Isso aumenta o escopo das variáveis desnecessariamente. O ideal é declarar as variáveis no momento que for utiliza-las;
- Retornar 0 e 1 ao invés de true e false: No C++, você não deve utilizar booleanos de maneira implícita (com int no lugar do tipo boolean);
- Usar #define para declarar constantes: No lugar, declare constantes com const;
Lembre-se que o C é uma linguagem extremamente madura. O compilador C++ deve ser mais antigo que eu e você. Então, é muito difícil que um erro seja do compilador, ou mesmo da IDE. Se está ocorrendo erro, as razões possíveis são:
a) Usar funções específicas de um compilador;
b) Erro no seu código.
Um parêntese no item b: Alguns tipos de erro geram comportamento undefined (indefinido). Um exemplo é o de usar uma variável não inicializada, ou de usar parâmetros incorretos em certas funções. Isso significa que pode ser que num compilador um código funcione perfeitamente com o erro, pois lá, “calha” da variável não inicializada cair numa região válida de memória, mas o problema se manifestará quando você trocar de compilador, ou de máquina. Portanto, caso você esteja rodando perfeitamente numa IDE, mas esteja tendo erros de ponteiro em outra, tenha certeza que isso ocorre por um erro no seu código.
Leia atentamente a documentação, para saber que situações geram o undefined behavior, e evite-as ao máximo possível, pois elas são erros de programação.