LINUX.ORG.RU

multiple definition of ...

 ,


0

1

Короче есть хедер небольшой, в нем есть класс и функция перегрузки оператора для этого класса, которая дружит с ним. Открываю хедер в нескольких местах. В есть что-то в вроде:

#ifndef my_super_bicycle_lib
#define my_super_bicycle_lib
...

#endif

Ругается только про функцию, что она несколько раз определена.

Как это красиво решить? :) Спасибо, всегда ваш нуб_который_спрашивает_в_development_полную_фигную.



Последнее исправление: CYB3R (всего исправлений: 1)

Ответ на: комментарий от Google-ch

Поместить определение в *.cpp, объявление - в заголовочный.

И да, почитай какой-нибудь учебник по Си++ или даже Си.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

В принципе я когда-то прочитал K&R и всего страуструпа, но это было давно и много из головы вылезло, вот и я решето теперь :)

Google-ch
() автор топика

Есть компиляция и есть линковка, на шаге компиляции берётся, грубо говоря, каждый .cpp файл и все включённые в него заголовки, каждая директива include заменяется содержимым заголовка и полученная простыня компилируется в объектный файл. Для всех определений генерируется код в том же объектном файле.

Если на шаге линковки одно определение будет иметь нагенерированный код в нескольких объектных файлах, возникнет сабжевая ошибка. Поэтому функции и переменные в заголовках надо объявлять так:

void foo();
extern int counter;
К классам правило не относится.

quiet_readonly ★★★★
()
Ответ на: комментарий от tailgunner

красиво - убрать функцию из заголовочного файла/сделать ее inline. коряво - поместить ее в анонимное пространство имен.

fixed.

vvviperrr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.