Ошибка множественного определения в C ++, даже если я не включил несколько файлов - PullRequest
0 голосов
/ 11 октября 2018

Я делал реализацию очереди в массиве.И я только что включил iostream и никакого другого файла.Мой код такой:

#include<iostream>
using namespace std;
const int SIZE=10;

static int front=-1;
static int rear=-1;

void ENQUEUE(int *list, int x) {
 if ((front==0 && rear==SIZE-1)||
      (front==rear+1)) {
       exit(0); //list is full
  }

  if (rear==SIZE-1) {
    rear=0;
  }
  else{
    rear=rear+1;
  }

  *(list+rear)=x;
}

int DEQUEUE(int *list){
  if (front==rear) {
    exit(0);
  }

  int x= *(list+front);
 if (front==SIZE-1) {
    front=0;
    return x;
  }
  else{
    front=front+1;
    return x;
  }
}

void viewlist(int list[]) {
  std::cout << "\n{ " << ' ';
  for (size_t i = 0; i < SIZE; i++) {
     std::cout << list[i] << ' ';
  }
  std::cout << "}" << '\n';
}

int main() {
  int list[SIZE];
  ENQUEUE(list,1);
  ENQUEUE(list, 2);
  ENQUEUE(list, 3);
  ENQUEUE(list, 4);
  viewlist(list);



  return 0;
}

, и я получаю это сообщение:


g++ queue_array.cpp queue_array.cpp -o queue_array
/tmp/ccAvLHD3.o: In function `ENQUEUE(int*, int)':
queue_array.cpp:(.text+0x0): multiple definition of `ENQUEUE(int*, int)'
/tmp/ccaLsRyT.o:queue_array.cpp:(.text+0x0): first defined here
/tmp/ccAvLHD3.o: In function `DEQUEUE(int*)':
queue_array.cpp:(.text+0x86): multiple definition of `DEQUEUE(int*)'
/tmp/ccaLsRyT.o:queue_array.cpp:(.text+0x86): first defined here
/tmp/ccAvLHD3.o: In function `viewlist(int*)':
queue_array.cpp:(.text+0xf6): multiple definition of `viewlist(int*)'
/tmp/ccaLsRyT.o:queue_array.cpp:(.text+0xf6): first defined here
/tmp/ccAvLHD3.o: In function `main':
queue_array.cpp:(.text+0x18b): multiple definition of `main'
/tmp/ccaLsRyT.o:queue_array.cpp:(.text+0x18b): first defined here
collect2: error: ld returned 1 exit status

И теперь я понятия не имею, что делать.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018
g++ queue_array.cpp queue_array.cpp -o queue_array

Почему вы компилируете queue_array.cpp два раза?

g++ queue_array.cpp -o queue_array

достаточно.

0 голосов
/ 11 октября 2018

Посмотрите на вашу команду:

g++ queue_array.cpp queue_array.cpp -o queue_array

У вас есть queue_array.cpp там дважды, поэтому она обрабатывается дважды.Второй раз ENQUEUE и DEQUEUE уже определены с момента первой обработки, поэтому вы получаете ошибку.Измените его на

g++ queue_array.cpp -o queue_array
...