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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ishi0
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 3
#1

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

05.02.2013, 17:42. Просмотров 792. Ответов 4
Метки нет (Все метки)

Есть простенький класс:
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 неразрешенных внешних элементов
Как их исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 17:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка: LNK2001: неразрешенный внешний символ (C++):

Ошибка линковки LNK2001. Неразрешенный внешний символ - C++
Здравствуйте, пытаюсь сделать статический метод, в котором используется статическая переменная. Вроде бы все сделал как по книге, но при...

LNK2001: неразрешенный внешний символ - C++
#include &quot;stdafx.h&quot; #include &lt;GL/glut.h&gt; #include &lt;windows.h&gt; #include &lt;glut.h&gt; #include &lt;gl\GL.H&gt; #include &lt;gl\GLAUX.H&gt; ...

Error LNK2001: неразрешенный внешний символ - C++
Скачал библиотеку ckhttp, подключил. Когда попытался скомпилировать пример с их сайта выдало ошибки: &gt;111.obj : error LNK2001:...

Error LNK2001: неразрешенный внешний символ - C++
Доброго времени суток. Прочитал кучу страниц форума по поиску выданных, но так и не понял - что мне делать, имеется ошибка 1&gt;Def.obj :...

Error LNK2001: неразрешенный внешний символ - C++
Всем привет. Столкнулся с ошибкой : error LNK2001: неразрешенный внешний символ. 1&gt;------ Построение начато: проект: gama,...

Error LNK2001: неразрешенный внешний символ - C++
Приветствую. Подскажите пожалуйста почему программа не хочет компилироваться. Имеется заголовочный файл my.h extern int foo; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
05.02.2013, 17:48 #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  [ТС] #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
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,243
Записей в блоге: 3
Завершенные тесты: 1
06.02.2013, 20:08 #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  [ТС] #5
Croessmah, если добавить эти строчки, компилятор пишет о переопределении.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 16:14
Привет! Вот еще темы с ответами:

Error LNK2001: неразрешенный внешний символ - C++
Обязательными условиями задачи являются использование своих конструктора и деструктора. Среда программирования Visual Studio 2008. ...

Error LNK2001: неразрешенный внешний символ - C++
Приветствую. Пытался вшить кое-что в программу, в итоге получаю множество ошибок линковки. Вывод: Ошибка 7 error LNK1120:...

Error LNK2001: неразрешенный внешний символ - C++
Помогите пожалуйста тупому нубу :) Все неприятности начались после добавления дружественного класса - class KWnd { static HWND...

Error LNK2001: неразрешенный внешний символ - C++
Учусь по Страуструпу, решаю задание, нужно создать header файл и два cpp и заставить работать сообща. Почему-то VS12 матерится на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.02.2013, 16:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru