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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

LNK2005 - C++

23.08.2012, 13:23. Просмотров 3186. Ответов 8
Метки нет (Все метки)

После долгой возни с cpp и их h решил сделать "по тупому" и скинуть все в stdafx.h, который все равно должен быть везде :< Ага.. скинул.. LNK2005 15 штук :<
#ifndef
#define
#endif
^-- Конструкция присутствует в каждом заголовочном файле.

Хочу заметить, что я ни разу extern не использовал. Считай, взял один файл и распихал по разным.
// Можете статейку подкинуть о модульном программировании? :<
Код одного stdafx.h
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
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
 
#pragma once
 
#include "targetver.h"
#include "resource.h"
 
#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
 
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <winsock2.h>
#include <vector>
 
#include "Defines.h"
#include "ServerClasses.h"
#include "GlobalVars.h"
 
#include "Chat Server.h"
 
#include "InitInstance.h"
#include "DlgProc.h"
#include "ServerFunctions.h"
 
// TODO: reference additional headers your program requires here


Ошибки
1>Compiling...
1>stdafx.cpp
1>Compiling...
1>Chat Server.cpp
1>Linking...
1>stdafx.obj : error LNK2005: "unsigned short __cdecl MyRegisterClass(struct HINSTANCE__ *)" (?MyRegisterClass@@YAGPAUHINSTANCE__@@@Z) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "int __cdecl InitInstance(struct HINSTANCE__ *,int)" (?InitInstance@@YAHPAUHINSTANCE__@@H@Z) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "int __stdcall DlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DlgProc@@YGHPAUHWND__@@IIJ@Z) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "public: int __thiscall SERVER::Start(void)" (?Start@SERVER@@QAEHXZ) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "public: int __thiscall SERVER::Stop(void)" (?Stop@SERVER@@QAEHXZ) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "public: int __thiscall SERVER::GetStatus(void)" (?GetStatus@SERVER@@QAEHXZ) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "struct HWND__ * hDlg" (?hDlg@@3PAUHWND__@@A) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "struct WSAData wsaData" (?wsaData@@3UWSAData@@A) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "wchar_t * szWindowClass" (?szWindowClass@@3PA_WA) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "struct HINSTANCE__ * hInst" (?hInst@@3PAUHINSTANCE__@@A) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "wchar_t * szTitle" (?szTitle@@3PA_WA) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "struct HWND__ * hWnd" (?hWnd@@3PAUHWND__@@A) already defined in Chat Server.obj
1>stdafx.obj : error LNK2005: "class SERVER server" (?server@@3VSERVER@@A) already defined in Chat Server.obj
1>D:\VisualStudioPrograms\Other\Debug\Chat Server.exe : fatal error LNK1169: one or more multiply defined symbols found

По ним понятно, что нечто было уже определено, но если у меня в каждом файле структура ifndef, то как такое возможно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 13:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос LNK2005 (C++):

error LNK2005 - C++
День Добрый! Прошу помочь с проблемой, 5-й день не могу ее решить %-) 1&gt;gun.obj : error LNK2005: &quot;class Block * tank&quot;...

Ошибка LNK2005 - C++
Создал небольшой проект, чтобы разобраться в работе с C++. При компиляции выдает такую ошибку: Вот код проекта: Core.h ...

error LNK2005 - C++
Ребят, выскакивает такая ошибка: 1&gt;test.obj : error LNK2005: &quot;char * * tip&quot; (?tip@@3PAPADA) already defined in real.obj 1&gt;real.obj :...

Error LNK2005 - C++
error LNK2005: &quot;struct SetErrors ErrorStruct&quot; (?ErrorStruct@@3USetErrors@@A) уже определен в LexerAnalyses.obj 1&gt;SyntaxAnalyzer.obj :...

Ошибка LNK2005: многократное определение - C++
Написала вот такой код в VS 2013: /* файл table.h */ #define _CRT_SECURE_NO_WARNINGS #ifndef STRUCT_H #define STRUCT_H ...

Ошибки линковки LNK2005, LNK1169 - C++
Как-то пробовал сделать программу из нескольких модулей, но наткнувшись на какие-то непонятные ошибки забросил это дело... Решив же...

8
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.08.2012, 14:18 #2
"по тупому" это использовать stdafx.h
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.08.2012, 16:58  [ТС] #3
Jupiter, ну я так и написал

Добавлено через 2 часа 19 минут
up-to-date
До сих пор ищу, как же от этого избавиться ; (
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2012, 17:15 #4
то, что ты сделал, эквивалентно следующему:

файл a.cpp:
C++
1
2
3
void foo (){
;
}
файл b.cpp:
C++
1
2
3
void foo (){
;
}
и компилишь и собираешь их вместе. они компилятся, а линкер не знает, которую ф-ю искользовать - из a или b

ты сделал именно это, но "сэкономил": включил одинаковые ф-ии во все практически модули сборки путем включения всех своих хидерных файлов.
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.08.2012, 17:23  [ТС] #5
novi4ok, но ведь stdafx.h подключается один раз в одном cpp-файле?
Или я тебя не правильно понял?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
23.08.2012, 17:31 #6
в stdafx.h надо выносить только стандартные хедеры (или хедеры сторонних библиотек). свои туда лучше не выносить.
у тебя stdafx.h объявлен как precompile?
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2012, 17:43 #7
Цитата Сообщение от nexen Посмотреть сообщение
novi4ok, но ведь stdafx.h подключается один раз в одном cpp-файле?
Или я тебя не правильно понял?
задай поиск по проекту на stdafx.h, и увидишь, где он подключается.
правило хорошей практики: пиши #include something.h только там, где он действительно нужен. написать его несколько раз - потратишь значительно меньше времени, чем на поиски "а что же это у миня такои!"
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 17:52 #8
Цитата Сообщение от nexen Посмотреть сообщение
По ним понятно, что нечто было уже определено, но если у меня в каждом файле структура ifndef, то как такое возможно?
но ведь stdafx.h подключается один раз в одном cpp-файле?
Структрура #ifndef срабатывает при множественном включении содержимого заголовочного файла в один файл. А у вас их два: stdafx.cpp и Server.cpp. Препроцессор не может определить наличие одинаковых выражений в разных файлах, а компоновщик их видит.
.
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.08.2012, 17:59  [ТС] #9
I.M., таки правда. Все дело в формировании pch. Спасибо всем. Вопрос закрыт
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2012, 17:59
Привет! Вот еще темы с ответами:

Ошибка 19 error LNK2005. Многофайловое приложение - C++
У меня возникает ошибка Ошибка 19 error LNK2005: &quot;void __cdecl set_0(double *,int)&quot; (?set_0@@YAXPANH@Z) уже определен в...

Сборка многофайлового приложения: ошибка LNK2005 - C++
Привет! Помогите пожалуйста разобраться со организацией исходников. Структура такова: ColorButton.h в нем подключается Object.h и...

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

Компиляция выдает ошибку "error LNK2005: _main уже определен в int.obj" - C++
Добрый день уважаемые. Столкнулся с данной проблемой. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
23.08.2012, 17:59
Ответ Создать тему
Опции темы

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