C++ 与gcc链接时出错

C++ 与gcc链接时出错,c++,gcc,linker,gcc4,C++,Gcc,Linker,Gcc4,我尝试编译以下代码: #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 c

我尝试编译以下代码:

#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 "-";}
#包括
#包括
使用名称空间std;
#定义数组_TAM 2
typedef int(*操作)(int,int);
typedef const char*(*Pfchar)();
int suma(int,int);
int resta(int,int);
常量字符*descrSuma();
常量字符*descrResta();
常量字符*simbSuma();
常量字符*simbResta();
类OP
{
私人:
公众:
操作操作;
Pfchar-descr;
Pfchar-simb;
};
int main(int argv,char*argc[])
{
OP ArrayOP[数组_TAM];
ArrayOP[0]。op=suma;
ArrayOP[0]。descr=descrSuma;
ArrayOP[1].op=resta;
ArrayOP[1]。descr=descrResta;
int op1,op2;
无符号整数i;
字符opcion;
bool fin=假;
while(fin!=真)
{

您是否使用了
gcc
而不是
g++

<> >如果代码> GCC 与C++代码一起使用,将会产生奇怪的链接错误。C++代码必须用<代码> G++< /COD>编译。< /P>
编辑:根据您提供的新信息,我看到您正在运行
g++-o main.o main.o


您应该改为运行:
g++-o main.cpp

您是否使用了
gcc
而不是
g++

<> >如果代码> GCC 与C++代码一起使用,将会产生奇怪的链接错误。C++代码必须用<代码> G++< /COD>编译。< /P>
编辑:根据您提供的新信息,我看到您正在运行
g++-o main.o main.o

您应该改为运行:
g++-o main.cpp

您编写“…它可以工作”,但随后您编写“…链接问题”

我对这个问题有点困惑,因为:

  • 如果链接有问题,那么它就不起作用了
  • 但如果它能工作,那么你就不会有链接问题
所以我猜你的意思是:“它可以编译,但是有链接错误”

如果是这样的话,你可以试试

g++ -g main.cpp -o main
而不是

gcc -g main.cpp -o main
编辑:…并在命令行=;)上执行not提及main.o

编辑:如果这一切都没有帮助-也许你的g++/gcc安装有问题

在ubuntu上,请尝试

sudo aptitude install build-essential
你写“…它工作”,但你写“…链接问题”

我对这个问题有点困惑,因为:

  • 如果链接有问题,那么它就不起作用了
  • 但如果它能工作,那么你就不会有链接问题
所以我猜你的意思是:“它可以编译,但是有链接错误”

如果是这样的话,你可以试试

g++ -g main.cpp -o main
而不是

gcc -g main.cpp -o main
编辑:…并在命令行=;)上执行not提及main.o

编辑:如果这一切都没有帮助-也许你的g++/gcc安装有问题

在ubuntu上,请尝试

sudo aptitude install build-essential


请编辑您的代码以删除不必要的垂直空白。并且“很多问题”不会给我们提供任何信息-发布您收到的特定错误消息。抱歉,我下次会这样做。请编辑您的代码以删除不必要的垂直空白。以及“很多问题”没有给我们任何继续的信息-发布您收到的特定错误消息。对不起,下次我会这样做它对gcc a g++也会这样做。什么是“相同的”?您从未准确解释过错误是什么?我有相同的错误:在该屏幕截图中,您再次运行main.o而不是main.cpp请不要使用:g++-g main.cpp main.o。这是错误的。使用:g++-g main.cpp-o main它对gcc a g++执行相同的操作。“相同”是什么你从来没有准确解释过错误是什么我也有同样的错误:在屏幕截图中,你再次运行main.o而不是main.cpp请不要使用:g++-g main.cpp main.o。那是错误的。使用:g++-g main.cpp-o main它在链接方面做同样的事情,我想,我没有调试库或类似的东西。什么样的开发环境这个?linux?cygwin?mingw?哪个版本的Ubuntu?karmic?它是32位还是64位的Ubuntu?…你是如何安装gcc/g++?我建议你使用sudo aptitude install build EssentialArmic Koala 9.10,32位。当我开始用C/C++编程时,它在链接时也是这样做的,我想,我还没有调试库或s诸如此类。这是什么样的开发环境?linux?cygwin?mingw?哪个版本的Ubuntu?karmic?是32位还是64位的Ubuntu?…你是如何安装gcc/g++?我建议你使用sudo aptitude install build essentialKarmic Koala 9.10,32位。我在开始用C/C编程时就这么做了++