我已经尝试编纂这个代号:

#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符号,它不链接:-(

需要帮助!

大连接的错误:

facon@facon-笔记本电脑:~/Windows-Mis documentos/Prog/C/Ejercicios/pedirentero$ g++-o主主。o主。o:在功能 `_start':

/建立/buildd/eglibc-2.10.1处/csu/../sysdeps/i386/elf/开始。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:

第一个定义在这里 主。o:(.rodata+0x0):多 定义的`_fp_hw'

/usr/lib/gcc/i486-linux的gnu/4.4.1/../../../../lib/crt1.o:(.rodata+0x0):第一个定义。o:在功能 _fini': (.fini+0x0): multiple definition of_fini'

/usr/lib/gcc/i486-linux的gnu/4.4.1/../../../../lib/crti.o:(.菲尼+0x0):第一个定义在这里 主。o:(.rodata+0x4):多 定义的`_IO_stdin_used'

/usr/lib/gcc/i486-linux的gnu/4.4.1/../../../../lib/crt1.o:(.rodata.cst4+0x0):第一个定义。o:在功能 __data_start': (.data+0x0): multiple definition of__数据_开始'

/usr/lib/gcc/i486-linux的gnu/4.4.1/../../../../lib/crt1.o:(.数据+0x0):第一个定义。o:在功能 __data_start': (.data+0x4): multiple definition of__dso_处理'

/usr/lib/gcc/i486-linux的gnu/4.4.1/crtbegin.o:(.数据+0x0):第一个定义。o:在功能 _init': (.init+0x0): multiple definition of_init'

/usr/lib/gcc/i486-linux的gnu/4.4.1/../../../../lib/crti.o:(.init+0x0):第一个定义在这里

/usr/lib/gcc/i486-linux的gnu/4.4.1/crtend.o:(.dtors+0x0):多个定义的`DTOR_END' 主。o:(.dtors+0x4):第一个定义在这里

/usr/bin/ld:警告:不能 创建。eh_frame_hdr部分, -eh帧-人类发展报告》被忽略。/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++/海湾合作委员会安装?

在ubuntu请试试

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