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

Ошибка компилятора: Неразрешенный внешний символ. - C++

Восстановить пароль Регистрация
 
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
31.10.2010, 12:46     Ошибка компилятора: Неразрешенный внешний символ. #1
При попытке скомпилировать в MSVC 2008 это:

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
#include "stdafx.h"
 
class Date{
    int d,m,y; 
    static Date default_date;
public:
    Date(int dd=0,int mm=0,int yy=0);
    static void set_default(int,int,int);
};
 
 
Date::Date(int dd,int mm,int yy){
    d=dd?dd:default_date.d;
    m=mm?mm:default_date.m;
    y=yy?yy:default_date.y;
}
 
void Date::set_default(int d,int m,int y){
    default_date=Date(d,m,y);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

Говорит что:


Код
error LNK2001: неразрешенный внешний символ ""private: static class Date Date::default_date" (?default_date@Date@@0V1@A)"	CPP_TEST_1.obj	CPP_TEST_1

Подскажите, где ковырять надо?..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.10.2010, 12:54     Ошибка компилятора: Неразрешенный внешний символ. #2
C++
1
Date Date::default_date;
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
31.10.2010, 14:36  [ТС]     Ошибка компилятора: Неразрешенный внешний символ. #3
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
Date Date::default_date;
То есть так?

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
#include "stdafx.h"
 
class Date{
        int d,m,y; 
        static Date default_date;
public:
        Date(int dd=0,int mm=0,int yy=0);
        static void set_default(int,int,int);
};
 
 
Date::Date(int dd,int mm,int yy){
        d=dd?dd:default_date.d;
        m=mm?mm:default_date.m;
        y=yy?yy:default_date.y;
}
 
void Date::set_default(int d,int m,int y){
        Date::default_date=Date(d,m,y);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
        return 0;
}
Тоже самое говорит.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
31.10.2010, 14:46     Ошибка компилятора: Неразрешенный внешний символ. #4
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
Date Date::default_date;
Кэп?

Если серьезно, то я не знаю реально ли такое сделать, объект класса Date содержит объект класса Date, который содержит объект класса Date, который .... и т.д.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.10.2010, 16:02     Ошибка компилятора: Неразрешенный внешний символ. #5
Бьерн Страуструп - Язык программирования С++. Статические члены

Добавлено через 9 минут
Кстати приведённый aferook пример как раз из "Язык программирования C++. Специальное издание".
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
31.10.2010, 16:52     Ошибка компилятора: Неразрешенный внешний символ. #6
Так там статический указатель, а ТС пытается создать статический объект.
Хотя могу в корне ошибаться!
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.10.2010, 18:00     Ошибка компилятора: Неразрешенный внешний символ. #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
Так там статический указатель, а ТС пытается создать статический объект.
Цитата Сообщение от rangerx Посмотреть сообщение
Кстати приведённый aferook пример как раз из "Язык программирования C++. Специальное издание"
.....
aferook
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 13
31.10.2010, 18:03  [ТС]     Ошибка компилятора: Неразрешенный внешний символ. #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
Так там статический указатель, а ТС пытается создать статический объект.
Хотя могу в корне ошибаться!
Нет, пример в книге говорит не о указателе, а именно о члене класса.

Цитата Сообщение от rangerx Посмотреть сообщение
Бьерн Страуструп - Язык программирования С++. Статические члены

Добавлено через 9 минут
Кстати приведённый aferook пример как раз из "Язык программирования C++. Специальное издание".
Да, пример от туда. Постепенно с решаемой задачи дошел до Страуструпа.
Приведенный пример не работает на MSVC. На Builder'e все идет на ура. Значит проблема в самом компиляторе. Думаю на линкер. Сбрасывал все настройки VC (методом devenv.exe /resetuserdata) - не помогло. У кого-нить есть мысли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2010, 19:48     Ошибка компилятора: Неразрешенный внешний символ.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.10.2010, 19:48     Ошибка компилятора: Неразрешенный внешний символ. #9
Вот так:
C++
1
2
3
4
5
6
7
8
9
10
class Date{
        int d,m,y; 
        static Date default_date;
public:
        Date(int dd=0,int mm=0,int yy=0);
        static void set_default(int,int,int);
};
 
Date Date::default_date;
//...
Yandex
Объявления
31.10.2010, 19:48     Ошибка компилятора: Неразрешенный внешний символ.
Ответ Создать тему
Опции темы

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