Ошибка компиляции LNK 2005

281
23 декабря 2016, 14:24
main.cpp
#include "server.h"
void main()
{
}
packet.h
#pragma once
#ifndef _PACKET_H
#define _PACKET_H
..
#endif
server.h
#pragma once
#ifndef _SERVER_H
#define _SERVER_H
#include "packet.h"
..
#endif      

Список ошибок:

Ошибка  LNK2005 "public: virtual void __thiscall IncomingAuth::handler(class Parcer &)" (?handler@IncomingAuth@@UAEXAAVParcer@@@Z) уже определен в main.obj EmulatorTop C:\Users\Ilya\Documents\Visual Studio 2015\Projects\EmulatorTop\ThreadEvents\server.obj

Если изменить main, то компилируется.

main.cpp
    #include "packet.h"
    void main()
    {
    }
Answer 1

Компилятор выдает сообщения об ошибках специально для вас, чтобы вы их читали. Данное сообщение об ошибке, выдаваемое при линковке единиц компиляции, очень ясное: функция handler определена в двух единицах компиляции.

Скорей всего она определена в заголовочном файле server.h и при этом не является встраиваемой, то есть не имеет спецификатора функции inline.

Либо уберите определение функции из заголовка, либо объявите ее со спецификатором inline.

Имейте в виду, что хотя компилятор MS VC++ компилирует такое объявление функции main, как

void main()

оно не соответствует стандарту C++. Согласно стандарту функция main без параметров должна быть объявлена как

int main()
READ ALSO
Qt | Работа с layout'ами

Qt | Работа с layout'ами

Есть QTabWidgetВ его вкладку нужно добавить виджет, например QLabel

402
Вопрос о итераторах [требует правки]

Вопрос о итераторах [требует правки]

В каких случаях программа при отладке выдаёт ошибку: vector iterator not dereferencable и как ее, примерно, можно исправить?

314
QScrollArea и Layout

QScrollArea и Layout

Есть QScrollAreaВ нее нужно засунуть n-ое количество виджетов так, чтобы все скролилось при нужде

380
C++ как удалить границу окна в CFormView [требует правки]

C++ как удалить границу окна в CFormView [требует правки]

Имеется такая вот граница,обводка !

337