С ++ включает объявление - PullRequest
       5

С ++ включает объявление

2 голосов
/ 13 декабря 2010

У меня есть две библиотеки в моем пути включения:

/usr/local/include/lib1/
/user/include/lib2/

Оба определяют заголовочный файл "vec.h", и я получаю следующую ошибку:

/usr/local/include/lib1/vec.h:22: error: redeclared with...

Как с этим справиться?

Ответы [ 2 ]

5 голосов
/ 13 декабря 2010

Вы делаете:

#include "lib1/vec.h"
#include "lib2/vec.h"

Ваш make-файл должен содержать пути до lib1 и lib2.

-I /usr/local/include /user/include

Вы должны убедиться, что у заголовков есть охранники, чтобы они не были объявлены дважды. Вы должны увидеть что-то вроде:

#ifndef MYHEADER_H_ab2592zx1__
#define MYHEADER_H_ab2592zx1__

#include ...
#include ...
class ...

#endif

У вас должны быть эти охранники независимо от того, есть ли у вас два включения с одним и тем же именем, и они обычно должны заканчиваться чем-то довольно случайным, чтобы ограничить / снизить вероятность того, что они конфликтуют с защитой заголовка в другом файле.

1 голос
/ 13 декабря 2010

(Извините, пока не можете комментировать, поэтому публикуйте как ответ.) Что именно находится в строке 22 файла lib1 / vec.h и каково полное сообщение об ошибке?Похоже, что заголовок пытается объявить что-то, что уже было объявлено где-то по-другому, что может даже не иметь никакого отношения к lib2 / vec.h.

EDIT

Итак, у вас есть конфликт имен.Я не знаю, к какой библиотеке относится trimesh2 / include / Vec.h (возможно, lib2), но проблема определенно в конфликте между этим заголовком и lib1 / img.h.Две библиотеки определяют два разных класса с одинаковым именем Vec.Нет решения этой проблемы, если у вас нет источников одной из библиотек и вы не хотите переименовать один из Vecs во что-то другое и перекомпилировать его.Вы просто не можете иметь две разные вещи с одним и тем же именем в одной программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...