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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
sauron4er
1 / 1 / 0
Регистрация: 08.01.2013
Сообщений: 12
20.02.2013, 14:39     Error LNK2001: неразрешенный внешний символ #1
Учусь по Страуструпу, решаю задание, нужно создать 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)"


Спасибо!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.02.2013, 15:36     Error LNK2001: неразрешенный внешний символ #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;
}
-=ЮрА=-
Заблокирован
Автор FAQ
20.02.2013, 15:51     Error LNK2001: неразрешенный внешний символ #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;
}
Миниатюры
Error LNK2001: неразрешенный внешний символ  
-=ЮрА=-
Заблокирован
Автор FAQ
20.02.2013, 15:52     Error LNK2001: неразрешенный внешний символ #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
sauron4er
1 / 1 / 0
Регистрация: 08.01.2013
Сообщений: 12
20.02.2013, 16:46  [ТС]     Error LNK2001: неразрешенный внешний символ #5
Спасибо большое)
Yandex
Объявления
20.02.2013, 16:46     Error LNK2001: неразрешенный внешний символ
Ответ Создать тему
Опции темы

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