Устранить ошибки компоновщика в GNU для объявления

У меня есть следующая реализация:

заголовок A:

class A
{
public:
foo();
};

A имеет свой собственный файл .cpp с реализацией для foo ()

// заголовок B

#include "A.h"class B
{
public foo();
};

Примечание: B не имеет собственного заголовка

Теперь в классе C.cpp я хочу повторно использовать заголовок A и реализацию из B.o. Так что в C.cpp я делаю:

//C.cpp
#include "A.h"....
B b;
b.foo();
..

Когда я скомпилирую вышеупомянутое, я обязательно получу ошибку объявления для функции foo (). Я хочу знать, есть ли какой-либо способ сказать компилятору GNU взять B.o и опустить A.o … Или сказать компилятору рассмотреть первый объект в файле make, который содержит реализацию, и игнорировать остальные?

Я использую GNU v2.16

1

Решение

Ваша проблема связана с переоценкой A так как в C.cpp он увидит 2 объявления A один через A.h и другие через B.hтак что просто охранник A.h в защите заголовка, чтобы избежать включения его более одного раза, как правило, вы всегда должны охранять свои заголовки:

#ifndef HEADER_A_h_INCLUDED
#define HEADER_A_h_INCLUDED
class A {...};
#endif

Теперь, если вы включите A.h более одного раза этот охранник заставит второго включить ничего!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]