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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 5.00
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
#1

Ошибки линковки LNK2005, LNK1169 - C++

04.04.2012, 18:19. Просмотров 3163. Ответов 20
Метки нет (Все метки)

Как-то пробовал сделать программу из нескольких модулей, но наткнувшись на какие-то непонятные ошибки забросил это дело...
Решив же намедни окончательно разобраться с этим вопросом, я опять столкнулся с непонятными ошибками линковки, поиск чётких ответов не дал.
Что же тут не так?

Файл Example.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef EXAMPLE_CPP
#define EXAMPLE_CPP
 
#include <string>
#include <iostream>
 
int out_string1(std::string str)
{
    std::cout << str << 1 << std::endl;
    return true; 
}
 
using namespace std;
void out_string2(string str)
{
    cout << str << 2 << endl;
}
 
#endif
Главный файл с мейном:

C++
1
2
3
4
5
6
7
8
9
#include "Example.cpp"
 
 
void main()
{
    out_string1("ololo");
    out_string2("test");
    system("pause");
}
1>ManifestResourceCompile:
1> All outputs are up-to-date.
1>Test.obj : error LNK2005: "int __cdecl out_string1(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?out_string1@@YAHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) уже определен в Example.obj
1>Test.obj : error LNK2005: "void __cdecl out_string2(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?out_string2@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) уже определен в Example.obj
1>C:\Users\User_name\Desktop\Test\Debug\Test.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
Среда VS 10.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2012, 18:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибки линковки LNK2005, LNK1169 (C++):

Ошибка линковки файлов при компиляции: "fatal error LNK1169: обнаружен многократно определенный символ" - C++
Visual C++ 2008 Express Edition ошибка Компиляция... 1.cpp Компоновка... 2.obj : error LNK2005: &quot;int __cdecl GetByte(int)&quot;...

Объясните доступно и просто возможные причины возникновения ошибки линковщика - LNK2005 - C++
Объясните доступно и просто возможные причины возникновения ошибки линковщика - LNK2005.

ошибки линковки с++(... - C++
помогите пожалуйста!! справится с ошибками линковки масив.obj : error LNK2001: unresolved external symbol &quot;void __cdecl obr(int &amp;,int *)&quot;...

Ошибки линковки - C++
Нужна помощь! Как исправить эти ошибки при компиляции! Все либы и заголовки дополнительные указаны он вроде их не требует! Я даже не...

Ошибки на стадии линковки - C++
obj\Release\main2.o:main2.cpp|| undefined reference to `__gxx_personality_sj0'| obj\Release\main2.o:main2.cpp|| undefined reference to...

[MPI] Ошибки линковки - C++
Надо было написать проект который складывает числа в массиве. И выводит сумму. Одно из требований использование MPI. Но при компиляции...

20
fasked
05.04.2012, 13:14     Ошибки линковки LNK2005, LNK1169
  #16

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Так почему бы их не писать сразу?
[irony]В простой программе нафига это надо, если и так все видно и понятно, легко контролируется. Лень же.[/irony]

2
kazak
05.04.2012, 13:28
  #17

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Лень же
Так оно может перерасти в привычку

0
silent_1991
05.04.2012, 13:46
  #18

Не по теме:

kazak, так это уже не к faskedу

0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
05.04.2012, 23:07  [ТС] #19
Стал пробовать с классами, вновь выскочили две ошибки, на этот раз LNK2001 и LNK1120, как сделать правильно?

Example.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
 
#include <string>
#include <iostream>
 
template <class T> class arr
{
    T* v;
    unsigned size;
public:
    arr(unsigned i);
    T &operator[](unsigned i);
    arr &operator=(arr &obj);
    ~arr();
};
Example.cpp
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
#pragma once
 
#include "Example.h" 
 
template <class T>
arr<T>::arr(unsigned i)
{
    v = new T[i];
    size = i;
}
 
template <class T>
arr<T>::~arr()
{
    delete[] v;
}
 
template <class T>
T &arr<T>::operator[](unsigned i)
{
    if (i < size) return v[i];
    else throw 42;
}
 
template <class T>
arr<T> &arr<T>::operator=(arr &obj)
{
    if (this->v == obj.v) return *this;
    delete[] v;
    size = obj.size;
    v = new T[size];
    for(unsigned i = 0; i < obj.size; ++i) v[i] = obj.v[i];
}
Файл с main'ом:
C++
1
2
3
4
5
6
7
#include "Example.h"
 
void main()
{
    arr<int> obj(10);
    system("pause");
}
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
05.04.2012, 23:38 #20
Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:


[irony]В простой программе нафига это надо, если и так все видно и понятно, легко контролируется. Лень же.[/irony]

В простой программе нафига это надо, если и так все видно и понятно, легко контролируется. Лень же.

Более того, в первом посте, я советовал вообще вместо h файла написать ВСЕГО 2 строчки объявлений 2х функций.
Но нет, давайте, посоветуйте создать, как лучшие гуру программирования советуют.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef EXAMPLE_@ADEcx
#define EXAMPLE_@ADEcx
#include <string>
class Example_output_manager:public Example, public output, public manager{
private:
string secret_data;
void safe_out_string(string);
public:
explict Example_output_manager(string);
Example_output_manager(const Example_output_manager&);
Example_output_manager& operator = (const Example_output_manager&);
Example_output_manager& operator = (const string&);
~Example_output_manager();
 
int out_string1(std::string);
void out_string2(std::string);
};
#endif
Все каноны "Великих Сей Плюсплюс" соблюдены?
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
06.04.2012, 08:26 #21
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Все каноны "Великих Сей Плюсплюс" соблюдены?
Кроме того, что этого вообще не скомпилируется?

Добавлено через 2 минуты
Whiteha, шаблонные классы нельзя разбивать на разные файлы. Вся реализация должна быть в заголовочном файле. Так как шаблон инстанцируется еще на этапе компиляции, то реализация шаблона должна быть доступна до линковки. В общем нельзя шаблоны разбивать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2012, 08:26
Привет! Вот еще темы с ответами:

Ошибки линковки в двусвязном списке - C++
Помогите, пожалуйста, разобраться, в чем ошибки.. Возникают на этапе линковки, Error LNK2019 unresolved external symbol List.h #include...

Ошибки линковки std::filesystem - C++
Доброго времени суток. В общем я хотел поиграться с фишками будущего стандарта, а именно с std::experimental::filesystem. Столкнулся с...

Ошибки линковки библиотеки FLTK - C++
Добрые сутки, на данный момент я изучаю FLTK По исключительной ситуации я ничего не могу понять, проблема состоит в том что я работаю...

Ошибки линковки при работе с DirectX - C++
Создал DirectX проект, и решил разбить на файлы, создал render.cpp и main.cpp, они отвечают за разные функции, но стоит подключить к...


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

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

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