سؤال

لقد حاول ترجمة هذه التعليمة البرمجية:

#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 "-";}

وهو يعمل, ولكن لدي الكثير من المشاكل ربط مع دول مجلس التعاون الخليجي مع debbugging الرموز و لا الرابط :-(

بحاجة إلى مساعدة!

كبير خطأ linker:

facon@facon-laptop:~/ويندوز - نظم المعلومات الإدارية documentos/Prog/C/Ejercicios/pedirentero$ g++ -o الرئيسي الرئيسي.o الرئيسي.o:في وظيفة `_start':

/بناء/buildd/eglibc-2.10.1/csu/../sysdeps/i386/العفريت/بدء.S:65:متعددة تعريف _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:

أولا تعريف هنا الرئيسية.س:(.rodata+0 × 0):متعددة تعريف _fp_hw'

/usr/lib/الخليج/i486-linux-gnu/4.4.1/../../../../lib/crt1.س:(.rodata+0 × 0):أولا تعريف هنا الرئيسي.o:في وظيفة _fini': (.fini+0x0): multiple definition of_fini'

/usr/lib/الخليج/i486-linux-gnu/4.4.1/../../../../lib/crti.س:(.فيني+0 × 0):أولا تعريف هنا الرئيسية.س:(.rodata+0x4):متعددة تعريف _IO_stdin_used'

/usr/lib/الخليج/i486-linux-gnu/4.4.1/../../../../lib/crt1.س:(.rodata.cst4+0 × 0):أولا تعريف هنا الرئيسي.o:في وظيفة __data_start': (.data+0x0): multiple definition of__data_ابدأ'

/usr/lib/الخليج/i486-linux-gnu/4.4.1/../../../../lib/crt1.س:(.البيانات+0 × 0):أولا تعريف هنا الرئيسي.o:في وظيفة __data_start': (.data+0x4): multiple definition of__dso_التعامل مع'

/usr/lib/الخليج/i486-لينكس-gnu/4.4.1/crtbegin.س:(.البيانات+0 × 0):أولا تعريف هنا الرئيسي.o:في وظيفة _init': (.init+0x0): multiple definition of_init'

/usr/lib/الخليج/i486-linux-gnu/4.4.1/../../../../lib/crti.س:(.الحرف الأول+0 × 0):أولا تعريف هنا

/usr/lib/الخليج/i486-لينكس-gnu/4.4.1/crtend.س:(.dtors+0 × 0):متعددة تعريف `DTOR_END' الرئيسية.س:(.dtors+0x4):أولا تعريف هنا

/usr/bin/ld:تحذير:لا إنشاء .eh_frame_hdr القسم ، --ايه الإطار hdr تجاهلها./usr/bin/ld:خطأ في الرئيسية.o(.eh_frame);لا .eh_frame_hdr الجدول سيتم إنشاؤه.

collect2:ld عاد 1 حالة خروج

PD:تحريرها.

هل كانت مفيدة؟

المحلول

تكتب "...يعمل", ولكن بعد ذلك تكتب "...مشاكل مع ربط".

أنا قليلا الخلط مع هذا السؤال, لأن:

  • إذا كان هناك مشاكل مع ربط بعد ذلك لا يعمل ...
  • ولكن إذا كان يعمل ، ثم لا مشاكل مع ربط...

لذا أعتقد أنك تعني:"فإنه يجمع ، ولكن هناك أخطاء الارتباط" ?

إذا كان هذا هو الحال, ثم يمكنك أن تجرب

g++ -g main.cpp -o main

بدلا من

gcc -g main.cpp -o main

تحرير:...والقيام لا ذكر الرئيسية.o على سطر الأوامر =;)

تحرير:إذا كان هذا كله لا يساعد - ربما هناك شيء خاطئ مع جهاز g++/دول مجلس التعاون الخليجي التثبيت ؟

على أوبونتو يرجى المحاولة

sudo aptitude install build-essential

نصائح أخرى

هل استخدام gcc بدلا من g++?

إذا gcc يستخدم مع رمز C++ وسوف تعطي غريب أخطاء الارتباط.رمز C++ يجب أن يكون المجمعة مع g++.


تحرير:استنادا إلى المعلومات الجديدة التي قدمتها أرى أنك تقوم بتشغيل g++ -o main main.o main.o.

يجب عليك بدلا من ذلك تشغيل: g++ -o main main.cpp

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top