Question

J'ai essayer de compiler ce code:

#include <iostream>
#include <cstdlib>

using namespace std;

#define ARRAY_TAM 2

typedef int (*operacion)(int, int);
typedef const char* (*Pfchar)();

int suma(int, int);
int resta(int, int);

const char* descrSuma();
const char* descrResta();
const char* simbSuma();
const char* simbResta();

class OP
{
    private:

    public:
        operacion op;
        Pfchar descr;
        Pfchar simb;

};

int main (int argv, char *argc[])
{
    OP ArrayOP[ARRAY_TAM];

    ArrayOP[0].op = suma;
    ArrayOP[0].descr = descrSuma;
    ArrayOP[1].op = resta;
    ArrayOP[1].descr = descrResta;

    int op1, op2;
    unsigned int i;
    char opcion;
    bool fin = false;

    while (fin != true)
    {
        cout << "CALCULADORA" << "\n";
        cout << "===========" << "\n";

        for (i = 0; (i < ARRAY_TAM); i++)
        {
            cout << i+1;
            cout << ".- ";
            cout << ArrayOP[i].descr() << "\n";
        }

        cout << i+1 << ".- " << "Salir" << endl;

        cout << "Opcion: ";

        cin >> opcion;
        opcion = atoi(&opcion);
        opcion--;
        cout << (int)opcion << endl;

        if ((opcion >= 0) && (opcion < ARRAY_TAM))
        {
            cout << "Operando 1: ";
            cin >> op1;
            cout << "Operando 2: ";
            cin >> op2;
            cout << "Resultado: op1 " << ArrayOP[opcion].simb()
                         << " op2 = " << ArrayOP[opcion].op(op1, op2);
        }   
        else if (opcion == ARRAY_TAM)
        {
            fin = true;
        }

    }

    return 0;

}


int suma (int op1, int op2)
{return op1 + op2;}

int resta (int op1, int op2)
{return op1 - op2;}

const char* descrSuma()    
{return "Suma";}

const char* descrResta() 
{return "Resta";}

const char* simbSuma()
{return "+";}

const char* simbResta()
{return "-";}

Un il fonctionne, mais j'ai beaucoup de problèmes de la liaison avec gcc avec des symboles de debbugging et il n'a pas le lien: - (

Besoin d'aide!

Grande erreur de liens:

  

Facon @ Facon-laptop: ~ / Windows - Mis   documentos / Prog / C / Ejercicios / pedirentero $   g ++ main.o -o principal main.o: En fonction   `_Start ':

     

/build/buildd/eglibc-2.10.1/csu /../ sysdeps / i386 / Elf / start.S: 65:   définition multiple de `_start '

     

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o: /build/buildd/eglibc-2.10.1/csu /../ sysdeps / i386 / Elf / start.S: 65:

     

d'abord défini ici   main.o :( Rodata + 0x0). multiple   définition de `_fp_hw '

     .

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( Rodata + 0x0):   d'abord défini ici main.o: En fonction   _fini': (.fini+0x0): multiple definition of_fini '

     

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crti.o :( + 0x0 fini).:   d'abord défini ici   main.o :( Rodata + 0x4). multiple   définition de `_IO_stdin_used '

     

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( rodata.cst4 + 0x0).:   d'abord défini ici main.o: En fonction   __data_start': (.data+0x0): multiple definition of__data_start '

     

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( données + 0x0).:   d'abord défini ici main.o: En fonction   __data_start': (.data+0x4): multiple definition of__dso_handle '

     .

:( /usr/lib/gcc/i486-linux-gnu/4.4.1/crtbegin.o données + 0x0):   d'abord défini ici main.o: En fonction   _init': (.init+0x0): multiple definition of_init '

     

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crti.o :( + 0x0 initialisation).:   d'abord défini ici

     .

:( /usr/lib/gcc/i486-linux-gnu/4.4.1/crtend.o dtors + 0x0):   définition multiple de ` DTOR_END   main.o :( dtors + de 0x4):. Tout d'abord défini ici

     

/ usr / bin / ld: Avertissement: Impossible   créer .eh_frame_hdr section,   --eh-frame-hdr ignoré. / Usr / bin / ld: erreur dans main.o (.eh_frame); non   .eh_frame_hdr table sera créée.

     

collect2: ld a renvoyé 1 état de sortie

PD:. Edité

Était-ce utile?

La solution

Vous écrivez « ... ça marche », mais vous écrivez « ... problèmes de liaison ».

Je suis peu confus avec cette question, parce que:

  • S'il y a des problèmes avec lien puis ne fonctionne pas ...
  • Mais si cela fonctionne, alors vous n'ont pas problèmes de relier ...

Je suppose que vous voulez dire: « il compile, mais il y a des erreurs de liaison »

?

Si tel est le cas, alors vous pouvez essayer

g++ -g main.cpp -o main

au lieu de

gcc -g main.cpp -o main

EDIT: ... et faire pas mentionner main.o sur la ligne de commande =;)

EDIT: Si tout ne vous aide pas - peut-être il y a quelque chose de mal avec votre g ++ / Installation gcc

sur ubuntu s'il vous plaît essayer

sudo aptitude install build-essential

Autres conseils

Avez-vous utilisé gcc au lieu de g++?

Si gcc est utilisé avec le code C ++, il donnera des erreurs de liaison étranges. Le code C de doit être compilé avec g++.


EDIT :. Sur la base de la nouvelle information fournie je vois que vous exécutez g++ -o main main.o main.o

Vous devriez plutôt exécuter: g++ -o main main.cpp

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top