С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
sauron4er
1 / 1 / 0
Регистрация: 08.01.2013
Сообщений: 12
#1

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

20.02.2013, 14:39. Просмотров 1338. Ответов 4
Метки нет (Все метки)

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

Таких тем в интернете множество, но всюду компилятор матерится на ссылку на функцию, которая нигде не определена. У меня ссылка на переменную. Если пытаюсь переменную определить в хедэр файле, мне не дает ее изменить в cpp. Подскажите, что делать?

my.h:
C++
1
2
3
extern int number;
void print_number();
void print(int);
my.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "my.h"
using namespace std;
 
void print_number()
{
    cout << number << endl;
}
 
void print(int i)
{
    cout << i << endl;
}
use.cpp:
C++
1
2
3
4
5
6
7
8
9
10
#include "my.h"
 
int main()
{
    number = 7;
    print_number();
    print(99);
 
    return 0;
}
ошибки:
1>my.obj : error LNK2001: неразрешенный внешний символ ""int number" (?number@@3HA)"
1>use.obj : error LNK2001: неразрешенный внешний символ ""int number" (?number@@3HA)"


Спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 14:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Error LNK2001: неразрешенный внешний символ (C++):

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

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

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

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

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

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

4
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.02.2013, 15:36 #2
sauron4er, ты только лишь объявил переменную number, но она у тебя нигде не определяется. Т.е. о ней знают, но в памяти она не создается.

вот, поправочка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "my.h"
 
int number; // определили.
 
int main()
{
    number = 7;
    print_number();
    print(99);
 
    return 0;
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
20.02.2013, 15:51 #3
sauron4er, зачем прицепил extern? extern имел бы смысл если бы у тебя было неколкьо хедеров с My.h в инклудах и нужно было в обоих хедерах поюзать int number но для объявления в самом My.h extern не нужен. Лучше допиши вначале My.h #pragma once - этим ты избавишь себя от ошибки типа "Symbol Already defined", погугли сам за эту директиву
Вот листинги твоих же файлов (изменения только в #pragma once и extern)
My.h
C++
1
2
3
4
5
#pragma once
 
int number;
void print_number();
void print(int);
My.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include "My.h"
using namespace std;
 
int main()
{
    number = 7;
    print_number();
    print(99);
 
    return 0;
}
 
void print_number()
{
    cout << number << endl;
}
 
void print(int i)
{
    cout << i << endl;
}
2
Миниатюры
Error LNK2001: неразрешенный внешний символ  
-=ЮрА=-
Заблокирован
Автор FAQ
20.02.2013, 15:52 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Собственно ниже листинг и проверка того что мы по сути делаем подключая My.h после iostream
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
#include <iostream>
///My.h BEGIN///
int number;
void print_number();
void print(int);
///My.h END///
using namespace std;
 
int main()
{
    number = 7;
    print_number();
    print(99);
 
    return 0;
}
 
void print_number()
{
    cout << number << endl;
}
 
void print(int i)
{
    cout << i << endl;
}
Output:
7
99
http://codepad.org/Ti5GEeB6
1
sauron4er
1 / 1 / 0
Регистрация: 08.01.2013
Сообщений: 12
20.02.2013, 16:46  [ТС] #5
Спасибо большое)
0
20.02.2013, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 16:46
Привет! Вот еще темы с ответами:

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

Классы и методы, error LNK2001: неразрешенный внешний символ - C++
пожалуста, посмотрите код, и скажите почему вылетает данная ошибка? // lab.k.kurs.cpp: определяет точку входа для консольного...

Error LNK2001: неразрешенный внешний символ "_mainCRTStartup" - C++
здравствуйте. я новичок в программировании, и у меня такая проблема. в ms visual c++ 2010 express создаю проект -&gt; консольное приложение...

Error LNK2001: неразрешенный внешний символ "_main" - C++
1&gt;MSVCRT.lib(crtexe.obj) : error LNK2001: неразрешенный внешний символ &quot;_main&quot; Что это такое и как его убрать?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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