Я получаю странную ошибку определения в проекте, я работаю под gcc. Я просмотрел все подобные ошибки, которые люди жаловались на форумах, но я не могу решить проблему на основе их обходных решений. Я делаю змеиный игры под Linux с Ncurses библиотеки Anways у меня есть point.h, который имеетОшибка нескольких определений с gcc
#ifndef POINT_H
#define POINT_H
struct point
{
int x,y;
point();
point(int col,int row);
};
point::point(){
x=0;
y=0;
}
point::point(int col,int row)
{
y=col;
x=row;
}
#endif
draw.h, который имеет только методы визуализации змея с Ncurses и snake.h
#ifndef SNAKE_H
#define SNAKE_H
#include "point.h"
#include "draw.h"
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <deque>
class snake
{
private:
int maxwidth,maxheight;
float delay,acceleration;
int old_axis,direction,tailtime,tailcurrent;
int limit_down,limit_right;
std::deque<point> dsnake;
std::deque<point> food;
char blk,partchr;
public:
snake();
void drawBorders();
void drawSnake();
void clearSnake();
void start();
void moveSnake(int towards);
void moveSnake();
void play();
void TailAdd();
point getmovePoint(point pos,int axis);
void getDirection();
void generateFood();
void drawFood();
};
#endif
еще я получаю ошибку, когда компилирую с помощью Я попробовал это с большим количеством различных флагов g ++. Пробовал делать класс точки вместо структуры и определял declerations в файле cpp, но они, к сожалению, не работают. Проект работает только в том случае, если я включил «snake.cpp» в main.cpp, который не является разумным решением .
g++ -std=c++11 main.cpp snake.cpp -lncurses
/tmp/ccCSPcUp.o: In function `point::point()':
snake.cpp:(.text+0x0): multiple definition of `point::point()'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x0): first defined here
/tmp/ccCSPcUp.o: In function `point::point()':
snake.cpp:(.text+0x0): multiple definition of `point::point()'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x0): first defined here
/tmp/ccCSPcUp.o: In function `point::point(int, int)':
snake.cpp:(.text+0x20): multiple definition of `point::point(int, int)'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x20): first defined here
/tmp/ccCSPcUp.o: In function `point::point(int, int)':
snake.cpp:(.text+0x20): multiple definition of `point::point(int, int)'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x20): first defined here
/tmp/ccCSPcUp.o: In function `init()':
snake.cpp:(.text+0x43): multiple definition of `init()'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x43): first defined here
/tmp/ccCSPcUp.o: In function `getMax(bool)':
snake.cpp:(.text+0x85): multiple definition of `getMax(bool)'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x85): first defined here
/tmp/ccCSPcUp.o: In function `drawColumn(int, char)':
snake.cpp:(.text+0xe8): multiple definition of `drawColumn(int, char)'
/tmp/cc1BDIIH.o:main.cpp:(.text+0xe8): first defined here
/tmp/ccCSPcUp.o: In function `drawLine(int, char)':
snake.cpp:(.text+0x140): multiple definition of `drawLine(int, char)'
/tmp/cc1BDIIH.o:main.cpp:(.text+0x140): first defined here
collect2: error: ld returned 1 exit status
и вот остальные мои файлы.
http://pastie.org/private/gpzbuohvlxhzyz5z4vjsw draw.h http://pastie.org/private/pfvriwssdzwreab5ibyww main.cpp http://pastie.org/private/ehkyvcodge7w1wqwpsbw point.h http://pastie.org/private/eomqodk9di3tj1ramyfg snake.cpp http://pastie.org/private/wznpkpayh9iopvjnrdfjw snake.h
Какова ваша команда для компилятора и компоновщика? –
Вы определяете функции в файлах заголовков. Не делайте этого, он вызывает эту ошибку. Определите их в файлах '.cpp'. –
попытался использовать «g ++ -std = C++ 11 main.cpp snake.cpp -lncurses» и некоторые другие варианты. – photonist