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

Ошибка: LNK2001: неразрешенный внешний символ - C++

Восстановить пароль Регистрация
 
ishi0
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 3
05.02.2013, 17:42     Ошибка: LNK2001: неразрешенный внешний символ #1
Есть простенький класс:
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
class Ant {
public:
    Ant(unsigned short pos, bool direct):
        position(pos),
        direction(direct) { antNum++; }
    Ant() { length = 0; antNum = 0; }
    ~Ant() { antNum--; }
    void moveStep();
    void setProps(short pos, bool direct){
        position = pos;
        direction = direct;
    }
    static int length;
    static int antNum;
private:
    short position;
    bool direction;
};
void Ant::moveStep() {
    if(direction) position++;
    else position--;
    if(position > length || position < 0)
        delete this;
}
При компиляции кода с этим классом появляются непонятные ошибки:
Код
main.cpp.obj : error LNK2001: неразрешенный внешний символ ""public: static int Ant::length" (?length@Ant@@2HA)"
main.cpp.obj : error LNK2001: неразрешенный внешний символ ""public: static int Ant::antNum" (?antNum@Ant@@2HA)"
ants.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
Как их исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
05.02.2013, 17:48     Ошибка: LNK2001: неразрешенный внешний символ #2
Цитата Сообщение от ishi0 Посмотреть сообщение
Ant() { length = 0; antNum = 0; }
Цитата Сообщение от ishi0 Посмотреть сообщение
static int length;
* * static int antNum;
А ты прямо так в конструкторе присваиваешь значения статическим элементам?
нехорошо это

почитай про статические члены и как их нужно инициализировать
ishi0
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 3
06.02.2013, 17:32  [ТС]     Ошибка: LNK2001: неразрешенный внешний символ #3
ValeryS, немного изменил код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Ant {
public:
    Ant(short pos, bool direct):
        position(pos),
        direction(direct) { antNum++; }
    Ant() {}
    ~Ant() { antNum--; }
    void moveStep();
    void setProps(short pos, bool direct){
        position = pos;
        direction = direct;
    }
    static short length;
    static short antNum;
private:
    short position;
    bool direction;
};
переменные инициализируются до создания любых объектов класса.
ошибки остались.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
06.02.2013, 20:08     Ошибка: LNK2001: неразрешенный внешний символ #4
В .cpp файле:
C++
1
2
int Ant::length = 0;
int Ant::antNum = 0;
ishi0
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 3
07.02.2013, 16:14  [ТС]     Ошибка: LNK2001: неразрешенный внешний символ #5
Croessmah, если добавить эти строчки, компилятор пишет о переопределении.
Yandex
Объявления
07.02.2013, 16:14     Ошибка: LNK2001: неразрешенный внешний символ
Ответ Создать тему
Опции темы

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