Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro no CodeBlocks


tatasl00

Pergunta

Olá pessoal,

estou iniciando na linguagem C++ e tenho duas dúvidas.

1) Primeiramente gostaria de saber como fazer para adicionar um novo arquivo dentro de um projeto. Eu uso CodeBlocks. Nesse caso a hierarquia seria a seguinte:

Creat a new project > Console application >Go > Next > C++ (Next) > Project Title > Next Finalizar.

Okay! Quando o primeiro arquivo é gerado tem o nome main.cpp. O arquivo main.cpp sempre funciona quando se compila. Agora se caso desejo criar um novo arquivo do mesmo tipo, nunca é compilado. Que acontece aqui?

2) Minha segunda dúvida é a seguinte:

Tenho o seguinte código e ocorre um erro quando o programa compila. Para quaisquer outros que já fiz nunca deu nenhum erro. Onde está o problema? Por favor os dados entre aspas estao em outra lingua por que estudo em outra lingua. Qualquer dúvida me perguntar, mas tudo em relacao ao código em C++ e dados matemáticos é entendível.

Código:

#include <iostream>

using namespace std;
//Datentyp für Gleitkommazahlen
int main()
{
    float varFloat;
    double varDouble;

    //Ausgabe von Gleitkommazahlen mit Standardeinstellung

    cout << "Ausgabe von Gleitkommazahlen: \n\n";
    cout << "Standardeinstellung: \n";
    cout << "========================";
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000): ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << "\n\n";

    //Ausgabe von Gleitkommazahlen mit geändert
    //Einstellungen

    cout << "15 Stellen: \n";
    cout << "=======================: \n";
    cout.precision(15);
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000); ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << endl;

    return 0
}

 

Agradeco!!!!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

menu File>New>Empty file

vai sair o aviso: "do you want to add this file in the active project(has to be saved first)?" que traduzido ao meu português ruim fica como: "Quer agregar este arquivo ao projeto ativo(Primeiro deve ser salvado)?". Isso quer dizer que esse arquivo vai ser adicionado ao projeto que estiver selecionado nesse momento, codeblocks permite ter aberto vários projetos de uma vez, porem só podemos editar o que nos temos como ativo, então se só tem um não tem que se preocupar, porem si aconteceu que você tem 2 ou mais então fique ligado nisso. Escolha SIM e de um nome e um lugar para o arquivo, melhor guardar junto ao main ou vai ter dores de cabeça com rotas relativas.

 

Mas com tudo isso você não vai notar nada diferente, para notar que funciona ou não devemos fazer isso ao main.cpp e ao outro arquivo novo criado:

Ao main.cpp:

void sayHello();

int main(){
    sayHello();
    return 0;
}

 

E ao novo arquivo.cpp:

#include <iostream>
using namespace std;

void sayHello(){
    cout << "Hello world!" << endl;
}

 

Em C/C++ devemos sempre ter a declaração feita antes de usar algo. Quando você usar um int ele deve existir primeiro não? Com as funções é igual, por isso não basta com incluir código em outro arquivo, devemos dizer em que ponto do main ele vai estar funcionando. Então os mecanismos nesse caso como si trata de uma função, simplesmente com ter o protótipo da função vai funcionar, o pré processador se encarga de buscar a função por vc, é só você não esquecer de fazer a declaração da função (protótipo). Outros mecanismos são os includes. ;)

2º     Certamente si compilar o erro que vai dar é:

||=== Build: Debug in lol (compiler: GNU GCC Compiler) ===|
C:\Documents and Settings\seuNome\Escritorio\lol\main.cpp||In function 'int main()':|
C:\Documents and Settings\seuNome\Escritorio\lol\main.cpp|40|error: expected ';' before '}' token|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

...e vai dizer que o erro esta na ultima linha do seu programa.

return 0
} <---- vai marcar essa linha.

 

porem você dev se centrar no que esta em negrito. In function 'int main()': error: expected ';' before '}' token|

vamos com meu português very good XDD...

 

Na funçao 'int main()': erro: esperando ';'(ponto e coma) antes de '}'(chave de terminação).

Aclaro que para o compilador não importa realmente em quantas linhas esta dividido seu código. o fato que return 0 e } estejam em linhas separadas não é importante para o compilador, você podia fazer seu programa inteiro em uma linha(si tiver coragem kkk), para o compilador o único que importa são os ponto e comas que indicam que uma instrução terminou, porem realmente não importa se você separou 40 instruções em 40 linhas ou as deixou elas na mesma linha. O único que o compilador vai te dizer é que falta um ponto e coma antes de tal coisa, nesse caso a tal coisa é '}', e a pergunta é... Que esta antes de '}' ? O return 0 <---- aqui você errou, falta ponto e coma. Para o programa o seu 

...

return 0
}

é como se fosse ... return 0 }

...então ele te esta avisando que o erro é que falta ponto e coma antes da chave de terminação. Falou! XD

 

TRUQUINHO! Si não encontrar o erro na linha que indica o compilador, olhar uma linha antes. ;)

Sorte!

Link para o comentário
Compartilhar em outros sites

  • 0

vangodp

Me clareou totalmente a explicacao, principalmente a segunda parte sobre o ';' haha, obrigado!!!

Mas quanto à primeira parte é o seguinte:

void se usa para funcoes. Tudo bem! Mas se por exemplo no programa que citei acima eu tivesse um arquivo main.cpp e no outro, por exemplo, float.cpp e fizesse o programa (que acho que dá para ver que se trata de numero de ponto flutuante), como eu deveria descrever o main.cpp e o float.cpp? Assim?

main.cpp

void "???"();

int main()
{
    "???"();

    return 0;
}

 

float.cpp

#include <iostream>

using namespace std;
//Datentyp für Gleitkommazahlen


void "???"();
{
    float varFloat;              => onde fica isso aqui?
    double varDouble;       => onde fica isso aqui?

    //Ausgabe von Gleitkommazahlen mit Standardeinstellung

    cout << "Ausgabe von Gleitkommazahlen: \n\n";          => cout continua para a impressao de dados, né?
    cout << "Standardeinstellung: \n";
    cout << "========================";
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000): ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << "\n\n";

    //Ausgabe von Gleitkommazahlen mit geändert
    //Einstellungen

    cout << "15 Stellen: \n";
    cout << "=======================: \n";
    cout.precision(15);
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000); ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << endl;
}

Que eu mudo no código se tenho de inserir sempre o void no main.cpp? Essa é a minha pergunta agora!

 

Muito agradecido!!!

Link para o comentário
Compartilhar em outros sites

  • 0

nesse caso você deveria fazer o #include<float.cpp> que inclui todo o arquivo ao inicio do main, porem para ficar mais bonito chamar ele de float.h que da a intender que é um header. Também você pode fazer o  include como #include "float.h" que quer dizer que o float.h se encontra na mesma pasta, ou citar toda o path tipo #include "C:/umaPasta/outraPasta/float.h", porem si estiver sempre junto só precisa por o nome e já esta.

As variáveis float varFloat e double varDouble  ficam dentro do escopo de dessa função que você chamou como "???()", a vida delas esta entre a chave de abertura'{' e de terminação '}' dessa função. Quando você chama uma função você cria uma pilha com todas essas variáveis que estão dentro das chaves, e quando a função termina se libera a memória.

Para ficar mais claro você pode fazer isso:

main.cpp:

#include "float.h"

int main()
{
    foo();

    return 0;
}

 

float.h

#include <iostream>

using namespace std;
//Datentyp für Gleitkommazahlen


void foo();
{
    float varFloat;              => onde fica isso aqui?
    double varDouble;       => onde fica isso aqui?

    //Ausgabe von Gleitkommazahlen mit Standardeinstellung

    cout << "Ausgabe von Gleitkommazahlen: \n\n";          => cout continua para a impressao de dados, né?
    cout << "Standardeinstellung: \n";
    cout << "========================";
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000): ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << "\n\n";

    //Ausgabe von Gleitkommazahlen mit geändert
    //Einstellungen

    cout << "15 Stellen: \n";
    cout << "=======================: \n";
    cout.precision(15);
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000); ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << endl;
}

 

Ou você pode fazer o prototipo da função foo como falei anteriormente, porem com esse sistema todo o documento ficaria incluído, si tivesse mais funções e não somente uma, todas seriam incluídas. O problema poderia surgir por problemas de dupla inclusão, como por exemplo si você presizar usar iostream tanto em main como no arquivo float.h, nesse caso você deveria fazer uso de uma coisa que eu a chamo de "proteção contra dupla inclusão" porem simplesmente se chama "guard". seria algo assim:

main.cpp

#include <iostream>
using namespace std;
#include "float.h"

int main()
{
    
    cout << "Chamando foo desde float.h" << endl;
    foo();

    return 0;
}

 

float.h

#ifndef FLOAT_H
#define FLOAT_H

#include <iostream>
using namespace std;

//Datentyp für Gleitkommazahlen

void foo();
{
    float varFloat;              => onde fica isso aqui?
    double varDouble;       => onde fica isso aqui?

    //Ausgabe von Gleitkommazahlen mit Standardeinstellung

    cout << "Ausgabe von Gleitkommazahlen: \n\n";          => cout continua para a impressao de dados, né?
    cout << "Standardeinstellung: \n";
    cout << "========================";
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000): ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << "\n\n";

    //Ausgabe von Gleitkommazahlen mit geändert
    //Einstellungen

    cout << "15 Stellen: \n";
    cout << "=======================: \n";
    cout.precision(15);
    varFloat = 10000000000.0;
    cout << "Größe Zahlen (10000000000); ";
    cout << varFloat << endl;
    cout << "Kommazahlen (1.33333333333333333333): \n";
    varFloat = 1.33333333333333333333;
    cout << "float:\t " << varFloat << endl;
    varDouble = 1.33333333333333333333;
    cout << "double:\t " << varDouble << endl;
}

#endif // FLOAT_H

Ok? =)

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

  • 0

vangodp

Oi, valeu, mas algum erro ocorre! error: unqualified-id before '{' token.

Significa que o "void foo();" está errado?

Outra questao: não importa o quanto de documentos eu tiver dentro de um projeto, posso sempre incluir em cada um deles '#include <iostream>' ou outro tipo? Quero dizer, sempre repetindo, ou depende do que se vai programar? Óbvia resposta acho...

 

Link para o comentário
Compartilhar em outros sites

  • 0

Disse que o identificador antes da chave { está sem classificar, isso acho que é o nome que não coincide, prove reconstruir o projeto no icone rebuild, realmente não sei qual o erro por que você não está aportando código. Mas si o prototipo for void foo(); a função tem que chamar igual. E no caso de usar include não precisa fazer o prototipo.

Sobre sua pergunta... Si usar o guard sim pode incluir varias vezes a mesma biblioteca. É mais... não é você quem decide si incluir varias vezes um header ou não, é a sua necessidade que o obriga a faze-lo, como falei sempre que necessitar usar string, cout, cin, etc, você vai ter que fazer os includes.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...