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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Medbat
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 8
#1

Unresolved external symbol, unresolved token - C++

01.08.2012, 22:56. Просмотров 2139. Ответов 10
Метки нет (Все метки)

Всем привет. У меня тут такое дело:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// learncpp.cpp : main project file.
 
#include "stdafx.h"
 
int main()
{
    const int LENGTH = 5;
    setlocale(LC_ALL,"Russian");
    int a = 1, b = 2;
    printf("%d, %d\n",a,b);
    swap(a,b);
    printf("%d, %d\n",a,b);
    char c[LENGTH] = "lol";
    char d[LENGTH] = "stas";
    printf("%s, %s\n",c,d);
    swap(c,d, LENGTH);
    printf("%s, %s\n",c,d);
    _getch();
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
 
#pragma once
 
// TODO: reference additional headers your program requires here
 
#include <stdio.h>
#include <conio.h>
#include <clocale>
 
template <typename any> void swap(any &a, any &b);
template <typename any> void swap(any *a, any *b, int n);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// stdafx.cpp : source file that includes just the standard includes
// learncpp.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
 
#include "stdafx.h"
 
template <typename any> void swap(any &a, any &b)
{
    any temp = a;
    a = b;
    b = temp;
}
 
template <typename any> void swap(any *a, any *b, int n)
{
    any temp;
    for (int i=0;i<n;i++)
    {
        temp=a[i];
        a[i]=b[i];
        b[i]=temp;
    }
}
Компилируем... опана!

1>------ Build started: Project: learncpp, Configuration: Debug Win32 ------
1> stdafx.cpp
1> AssemblyInfo.cpp
1> learncpp.cpp
1> Generating Code...
1> .NETFramework,Version=v4.0.AssemblyAttributes.cpp
1>learncpp.obj : error LNK2028: unresolved token (0A00000B) "void __cdecl swap<char>(char *,char *,int)" (??$swap@D@@$$FYAXPAD0H@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>learncpp.obj : error LNK2028: unresolved token (0A00000D) "void __cdecl swap<int>(int &,int &)" (??$swap@H@@$$FYAXAAH0@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>learncpp.obj : error LNK2019: unresolved external symbol "void __cdecl swap<char>(char *,char *,int)" (??$swap@D@@$$FYAXPAD0H@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>learncpp.obj : error LNK2019: unresolved external symbol "void __cdecl swap<int>(int &,int &)" (??$swap@H@@$$FYAXAAH0@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>D:\progs\vcpp\projects\learncpp\Debug\learncpp.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Если же засунуть всё в один файл, то код делает всё правильно. Почему так? Гуглил, гуглил, не нашёл, в чём проблема. Где-то вроде говорят надо библиотеку подключить какую-то, то ли user32.dll, то ли ещё какую.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2012, 22:56     Unresolved external symbol, unresolved token
Посмотрите здесь:

Unresolved external symbol C++
C++ unresolved external symbol
C++ unresolved external symbol
C++ unresolved external symbol
Unresolved external symbol C++
Unresolved external symbol C++
Unresolved external symbol C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
01.08.2012, 23:15     Unresolved external symbol, unresolved token #2
Шаблонные функции нельзя компилировать отдельно. Код шаблонных функций должен быть расположен либо в заголовочных файлах, либо непосредственно в том модуле, где они используются.
Medbat
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 8
01.08.2012, 23:18  [ТС]     Unresolved external symbol, unresolved token #3
И ведь действительно так. Спасибо большое!

UPD: хм, быстро гуглится. Разобрался с прагмой ванс
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
01.08.2012, 23:22     Unresolved external symbol, unresolved token #4
Цитата Сообщение от Medbat Посмотреть сообщение
что значит "#pragma once"?
Это значит, что если попытаться несколько раз подключить этот заголовок в одном модуле, то включён он будет только один раз (если компилятор поддерживает эту прагму)
См. #include guard.
Medbat
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 8
03.08.2012, 15:58  [ТС]     Unresolved external symbol, unresolved token #5
Почти такая же ошибка, но тут дело явно не в шаблонах...
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "stdafx.h"
 
// Стандартный включаемый файл Windows
#include <windows.h>
 
// Прототип функции обратного вызова для обработки сообщений
LRESULT CALLBACK fnMessageProcessor (HWND, UINT, WPARAM, LPARAM);
 
// Функция вызывается автоматически, когда программа запускается
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
                    int iCmdShow)
{
   HWND         hWnd;
   MSG          msg;
   WNDCLASSEX   wndclass;
 
   // Настройка класса окна
   wndclass.cbSize        = sizeof(WNDCLASSEX);
   wndclass.style         = CS_HREDRAW | CS_VREDRAW;
   wndclass.lpfnWndProc   = fnMessageProcessor;
   wndclass.cbClsExtra    = 0;
   wndclass.cbWndExtra    = 0;
   wndclass.hInstance     = hInstance;
   wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
   wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
   wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
   wndclass.lpszMenuName  = NULL;
   wndclass.lpszClassName = L"Window Class"; // Имя класса
   wndclass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
 
   // Регистрация класса окна
   if(RegisterClassEx(&wndclass) == 0)
   {
       // Сбой программы, выход
       exit(1);
   }
 
   // Создание окна
   hWnd = CreateWindowEx(
      WS_EX_OVERLAPPEDWINDOW,
      L"Window Class",            // Имя класса
      L"Create Window Example",   // Текст заголовка
      WS_OVERLAPPEDWINDOW,
      0,
      0,
      320,
      200,
      NULL,
      NULL,
      hInstance,
      NULL);
 
   // Отображение окна
   ShowWindow(hWnd, iCmdShow);
 
   // Обработка сообщений, пока программа не будет прервана
   while(GetMessage (&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
 
   return (msg.wParam);
}
 
// Функция обратного вызова для обработки сообщений 
// (НЕОБХОДИМА ВСЕМ ПРОГРАММАМ ДЛЯ WINDOWS)
LRESULT CALLBACK fnMessageProcessor (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
   switch(iMsg)
   {
      // Вызывается, когда впервые создается окно
      case WM_CREATE:
         return(0);
      // Вызывается, когда окно обновляется
      case WM_PAINT:
         return(0);
      // Вызывается, когда пользователь закрывает окно
      case WM_DESTROY:
         PostQuitMessage(0);
         return(0);
      default:
         return DefWindowProc(hWnd, iMsg, wParam, lParam);
   }
}
Output:


log
1>------ Build started: Project: learcpp2, Configuration: Debug Win32 ------
1> learcpp2.cpp
1>learcpp2.obj : error LNK2028: unresolved token (0A00000B) "extern "C" long __stdcall DefWindowProcW(struct HWND__ *,unsigned int,unsigned int,long)" (?DefWindowProcW@@$$J216YGJPAUHWND__@@IIJ@Z) referenced in function "long __stdcall fnMessageProcessor(struct HWND__ *,unsigned int,unsigned int,long)" (?fnMessageProcessor@@$$FYGJPAUHWND__@@IIJ@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A00000C) "extern "C" void __stdcall PostQuitMessage(int)" (?PostQuitMessage@@$$J14YGXH@Z) referenced in function "long __stdcall fnMessageProcessor(struct HWND__ *,unsigned int,unsigned int,long)" (?fnMessageProcessor@@$$FYGJPAUHWND__@@IIJ@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A00000D) "extern "C" long __stdcall DispatchMessageW(struct tagMSG const *)" (?DispatchMessageW@@$$J14YGJPBUtagMSG@@@Z) referenced in function "extern "C" long __cdecl DispatchMessage(struct tagMSG const *)" (?DispatchMessage@@$$J0YAJPBUtagMSG@@@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A00000F) "extern "C" int __stdcall TranslateMessage(struct tagMSG const *)" (?TranslateMessage@@$$J14YGHPBUtagMSG@@@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000010) "extern "C" int __stdcall GetMessageW(struct tagMSG *,struct HWND__ *,unsigned int,unsigned int)" (?GetMessageW@@$$J216YGHPAUtagMSG@@PAUHWND__@@II@Z) referenced in function "extern "C" int __cdecl GetMessage(struct tagMSG *,struct HWND__ *,unsigned int,unsigned int)" (?GetMessage@@$$J0YAHPAUtagMSG@@PAUHWND__@@II@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000012) "extern "C" int __stdcall ShowWindow(struct HWND__ *,int)" (?ShowWindow@@$$J18YGHPAUHWND__@@H@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000013) "extern "C" struct HWND__ * __stdcall CreateWindowExW(unsigned long,wchar_t const *,wchar_t const *,unsigned long,int,int,int,int,struct HWND__ *,struct HMENU__ *,struct HINSTANCE__ *,void *)" (?CreateWindowExW@@$$J248YGPAUHWND__@@KPB_W0KHHHHPAU1@PAUHMENU__@@PAUHINSTANCE__@@PAX@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000015) "extern "C" unsigned short __stdcall RegisterClassExW(struct tagWNDCLASSEXW const *)" (?RegisterClassExW@@$$J14YGGPBUtagWNDCLASSEXW@@@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000016) "extern "C" void * __stdcall GetStockObject(int)" (?GetStockObject@@$$J14YGPAXH@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000017) "extern "C" struct HICON__ * __stdcall LoadCursorW(struct HINSTANCE__ *,wchar_t const *)" (?LoadCursorW@@$$J18YGPAUHICON__@@PAUHINSTANCE__@@PB_W@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2028: unresolved token (0A000018) "extern "C" struct HICON__ * __stdcall LoadIconW(struct HINSTANCE__ *,wchar_t const *)" (?LoadIconW@@$$J18YGPAUHICON__@@PAUHINSTANCE__@@PB_W@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" long __stdcall DefWindowProcW(struct HWND__ *,unsigned int,unsigned int,long)" (?DefWindowProcW@@$$J216YGJPAUHWND__@@IIJ@Z) referenced in function "long __stdcall fnMessageProcessor(struct HWND__ *,unsigned int,unsigned int,long)" (?fnMessageProcessor@@$$FYGJPAUHWND__@@IIJ@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" void __stdcall PostQuitMessage(int)" (?PostQuitMessage@@$$J14YGXH@Z) referenced in function "long __stdcall fnMessageProcessor(struct HWND__ *,unsigned int,unsigned int,long)" (?fnMessageProcessor@@$$FYGJPAUHWND__@@IIJ@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall GetMessageW(struct tagMSG *,struct HWND__ *,unsigned int,unsigned int)" (?GetMessageW@@$$J216YGHPAUtagMSG@@PAUHWND__@@II@Z) referenced in function "extern "C" int __cdecl GetMessage(struct tagMSG *,struct HWND__ *,unsigned int,unsigned int)" (?GetMessage@@$$J0YAHPAUtagMSG@@PAUHWND__@@II@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" long __stdcall DispatchMessageW(struct tagMSG const *)" (?DispatchMessageW@@$$J14YGJPBUtagMSG@@@Z) referenced in function "extern "C" long __cdecl DispatchMessage(struct tagMSG const *)" (?DispatchMessage@@$$J0YAJPBUtagMSG@@@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall TranslateMessage(struct tagMSG const *)" (?TranslateMessage@@$$J14YGHPBUtagMSG@@@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall ShowWindow(struct HWND__ *,int)" (?ShowWindow@@$$J18YGHPAUHWND__@@H@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" struct HWND__ * __stdcall CreateWindowExW(unsigned long,wchar_t const *,wchar_t const *,unsigned long,int,int,int,int,struct HWND__ *,struct HMENU__ *,struct HINSTANCE__ *,void *)" (?CreateWindowExW@@$$J248YGPAUHWND__@@KPB_W0KHHHHPAU1@PAUHMENU__@@PAUHINSTANCE__@@PAX@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" unsigned short __stdcall RegisterClassExW(struct tagWNDCLASSEXW const *)" (?RegisterClassExW@@$$J14YGGPBUtagWNDCLASSEXW@@@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" void * __stdcall GetStockObject(int)" (?GetStockObject@@$$J14YGPAXH@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" struct HICON__ * __stdcall LoadCursorW(struct HINSTANCE__ *,wchar_t const *)" (?LoadCursorW@@$$J18YGPAUHICON__@@PAUHINSTANCE__@@PB_W@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>learcpp2.obj : error LNK2019: unresolved external symbol "extern "C" struct HICON__ * __stdcall LoadIconW(struct HINSTANCE__ *,wchar_t const *)" (?LoadIconW@@$$J18YGPAUHICON__@@PAUHINSTANCE__@@PB_W@Z) referenced in function "extern "C" int __stdcall WinMain(struct HINSTANCE__ *,struct HINSTANCE__ *,char *,int)" (?WinMain@@$$J216YGHPAUHINSTANCE__@@0PADH@Z)
1>D:\progs\vcpp\projects\learcpp2\Debug\learcpp2.exe : fatal error LNK1120: 22 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



Microsoft Visual C++ 2010 Express. И что с этим делать? Никакой код для создания окон виндовских не работает.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2012, 16:18     Unresolved external symbol, unresolved token #6
У меня, VC 2010, только ругался на L пред " . Убрал, всё откомпилировалось и запустилось.
Medbat
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 8
03.08.2012, 16:22  [ТС]     Unresolved external symbol, unresolved token #7
alsav22, не в этом дело. Там в зависимости от кодировки в настройках проекта ставится L перед строками. А так код-то компилируется, но в программу не собирается
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2012, 16:27     Unresolved external symbol, unresolved token #8
Цитата Сообщение от Medbat Посмотреть сообщение
alsav22, не в этом дело. Там в зависимости от кодировки в настройках проекта ставится L перед строками. А так код-то компилируется, но в программу не собирается
Что дело не в этом, я понимаю. Просто написал, что у меня этих ошибок нет. IDE какая? И что ещё в программу входит?
Medbat
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 8
03.08.2012, 16:35  [ТС]     Unresolved external symbol, unresolved token #9
alsav22, написал же, visual c++ 2010 express. А в программу ничего больше не входит
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2012, 16:52     Unresolved external symbol, unresolved token #10
Проект какой?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2012, 18:24     Unresolved external symbol, unresolved token
Еще ссылки по теме:

Unresolved external symbol C++
C++ Unresolved external symbol
C++ Unresolved external symbol
Unresolved external symbol C++
C++ Unresolved external symbol

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

Или воспользуйтесь поиском по форуму:
Medbat
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 8
03.08.2012, 18:24  [ТС]     Unresolved external symbol, unresolved token #11
Да-да, дело оказалось в проекте, я таки догадался. Надо пустой создавать...
Yandex
Объявления
03.08.2012, 18:24     Unresolved external symbol, unresolved token
Ответ Создать тему
Опции темы

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