Форум программистов, компьютерный форум CyberForum.ru

error LNK2005 - C++

Восстановить пароль Регистрация
 
alexsanqp
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 37
27.09.2013, 12:10     error LNK2005 #1
День Добрый! Прошу помочь с проблемой, 5-й день не могу ее решить

1>gun.obj : error LNK2005: "class Block * tank" (?tank@@3PAVBlock@@A) already defined in block.obj
1>main.obj : error LNK2005: "class Block * tank" (?tank@@3PAVBlock@@A) already defined in block.obj
1>main.obj : error LNK2005: "class Tanks player" (?player@@3VTanks@@A) already defined in gun.obj
1>main.obj : error LNK2005: "class Gun shot" (?shot@@3VGun@@A) already defined in gun.obj
1>move.obj : error LNK2005: "class Move go" (?go@@3VMove@@A) already defined in main.obj
1>tanks.obj : error LNK2005: "class Tanks player" (?player@@3VTanks@@A) already defined in gun.obj
1>tanks.obj : error LNK2005: "class Block * tank" (?tank@@3PAVBlock@@A) already defined in block.obj
1>TankGame.exe : fatal error LNK1169: one or more multiply defined symbols found

Есть 4-ри класса

Block.h (Block.cpp)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Block.h
#pragma once
 
class Block{
public:
    int x, y;
    bool exist;
 
    Block(void);
}tank[5];
//*********Block.cpp*************
#include "block.h"
 
Block::Block(void){
    x = 0;
    y = 0;
}
Tank.h (Tanks.cpp)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Tank.h
#pragma once
 
class Tanks{
public: 
    char direction, fdirection;
    int size, stem;
 
    Tanks(void);
    void generator(void);
}player;
//**************Tank.cpp***********
#include "tank.h"
#include "block.h"
 
Tanks::Tanks(void){
    size = 4;
    stem = 10;
    direction = 'a';
    fdirection = 'd';
}
void Tanks::generator(){    
    for(int i = 0; i < size; i++){
        tank[i].x = 0;
        tank[i].y = 0;
        tank[i].exist = true;
    }   
}
Gun.h (Gun.cpp)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//Gun.h
#pragma once
 
class Gun{
public:
    char f,q;
    int ay, ax;
 
    Gun(void);
    void getPosition(void);
    void repos(void);
}shot;
//**************Gun.cpp**********
#include <GL/glut.h>
#include "gun.h"
#include "block.h"
#include "tank.h"
 
Gun::Gun(void){
    f = 'f';
    q = 'q';    
    ax = 0;
    ay = 0;
}
 
void Gun::getPosition(void){
    ax = tank[1].x+20;
    ay = tank[1].y+30;
}
 
void Gun::repos(void){  
if(player.fdirection == 'f'){
    glPushMatrix();
    glTranslatef(0.0,0.0,0.0);
    glPointSize(10);
    glEnable(GL_POINT_SMOOTH);
 
    glBegin(GL_POINTS);
        glColor3f(1,0,1);
    glVertex2f(ax,ay);
    glEnd();
    glPopMatrix();
    if(player.stem < 20)
        ay += 5; 
    else
        ay += 10;
    glDisable(GL_POINT_SMOOTH);
    }       
}
Move.h (move.cpp)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Move.h
#pragma once
 
class Move
{
public:
    char w,s,a,d;
 
    Move(void);
    void turnW(unsigned char key);
}go;
//**************Move.cpp***********
#include "move.h"
 
Move::Move(void){
    w = 'w';
    s = 's';
    a = 'a';
    d = 'd';
}
void Move::turnW(unsigned char key){
    if(key == 'w'){
        //.....
    }
}

*********Main.cpp************
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <GL/glut.h>
#include <stdlib.h>
#include <time.h>
#include "block.h"
#include "tank.h"
#include "gun.h"
#include "move.h"
 
void border(){
    for(int i = 0; i <= player.size; i++){
        if(tank[i].x > 390)tank[i].x = - 400;
        if(tank[i].x < -400)tank[i].x = 390;
        if(tank[i].y > 240)tank[i].y = - 250;
        if(tank[i].y < -250)tank[i].y = 240;
        if(shot.ay > 410)shot.ay = 410;
    }
}
 
void keyboard(unsigned char key, int x,int y){
    if(key == go.w){
         go.turnW(key);
    }   
}
 
void Timer (int value){
    shot.repos();
    border();
    glutPostRedisplay();
    glutTimerFunc(50,Timer,0);
}
 
 
void draw(){
glClear(GL_COLOR_BUFFER_BIT);       
glTranslated(0,0,0);     
 
glFlush();
glutSwapBuffers();
}
 
void Initialization(){
    glClearColor(0.1,0.3,0.5,1.0);
    glClearDepth(1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glOrtho(-400,400,-250,250,-200,200);
}
 
int main (int argc, char ** argv){
    player.generator();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(800, 500); 
    glutInitWindowPosition(180, 150);
    glutCreateWindow("Tanks"); 
    glutDisplayFunc(draw);
    glutTimerFunc(100,Timer,0);
    glutKeyboardFunc(keyboard);
    Initialization();
    glutMainLoop();
    system("pause >> NULL");
 
    return(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2013, 12:10     error LNK2005
Посмотрите здесь:

C++ Ошибки линковки LNK2005, LNK1169
C++ LNK2005
C++ Linker error msvcprtd.lib(msvcp100d.dll) error lnk2005 already defined libcpmtd.lib
error LNK2005 C++
Ошибка LNK2005 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
borodat
Заблокирован
27.09.2013, 12:27     error LNK2005 #2
C++
1
2
3
4
5
namespace myName {
    class myClass {
        ...
    } instance; // так делать нельзя. Тем более в заголовках. Объекты создаются в ходе компиляции, выполнения. Убери всё это из заголовков и создай в юнитах компиляции (*.cpp)
}
5 букв

Добавлено через 49 секунд
Точнее так можно сделать, но если класс определен не в заголовочном файле.
alexsanqp
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 37
27.09.2013, 12:46  [ТС]     error LNK2005 #3
а как их правильно создавать в срр? у меня другие классы их начали требовать , сделал вот так, работает или можно как то правильней ?:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <GL/glut.h>
#include "gun.h"
#include "block.h"
#include "tank.h"
 
 
 
Gun::Gun(void){
    f = 'f';
    q = 'q';    
    ax = 0;
    ay = 0;
}
 
void Gun::getPosition(void){
    Block tank[5];            //
 
    ax = tank[1].x+20;
    ay = tank[1].y+30;
}
 
void Gun::repos(void){  
    Tanks player;             //
 
if(player.fdirection == 'f'){
           //...........
    }       
}
borodat
Заблокирован
27.09.2013, 13:15     error LNK2005 #4
foo.h
C++
1
2
3
4
5
class foo {
    foo();
    type_t method1();
    type_t method2();
}
foo.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
foo::foo() {
    ...
}
 
type_t foo::method1() {
    ...
}
 
type_t foo::method2() {
    ...
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "foo.h"
 
int main () {
    foo obj;
    obj.method1();
    obj.method2();
 
    return0;
}
Yandex
Объявления
27.09.2013, 13:15     error LNK2005
Ответ Создать тему
Опции темы

Текущее время: 10:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru