C++ 中的多重定义错误,即使我没有包含多个文件
Multiple definition error in C++ even when I've not included multiple files
我在数组中执行队列。我刚刚包含了 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
现在我不知道该怎么做。
看你的命令:
g++ queue_array.cpp queue_array.cpp -o queue_array
你有两次 queue_array.cpp
,所以它被处理了两次。第二次 ENQUEUE
和 DEQUEUE
已经从第一次处理开始定义,这就是你得到错误的原因。将其更改为
g++ queue_array.cpp -o queue_array
g++ queue_array.cpp queue_array.cpp -o queue_array
为什么编译queue_array.cpp两次?
g++ queue_array.cpp -o queue_array
够了。
我在数组中执行队列。我刚刚包含了 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
现在我不知道该怎么做。
看你的命令:
g++ queue_array.cpp queue_array.cpp -o queue_array
你有两次 queue_array.cpp
,所以它被处理了两次。第二次 ENQUEUE
和 DEQUEUE
已经从第一次处理开始定义,这就是你得到错误的原因。将其更改为
g++ queue_array.cpp -o queue_array
g++ queue_array.cpp queue_array.cpp -o queue_array
为什么编译queue_array.cpp两次?
g++ queue_array.cpp -o queue_array
够了。