заголовок — найден один или несколько кратно определенных символов Переполнение стека

У меня есть файл заголовка и 5 различных файлов C ++, и мне нужно, чтобы этот заголовок был включен во все мои файлы C ++. Я не объявлял какие-либо файлы cpp с помощью include «x.cpp». Кто-нибудь знает, как я могу это исправить? (У меня есть 6 заголовков и 5 cpp, поэтому я не переписал весь код.)

#ifdef _DEBUG
#ifndef _UTIL_H_
#define _UTIL_H_int LOOPCOUNTER=0;

int loopi;
#define LOOP LOOPCOUNTER++;
#define MARKLOOPS (loopi=LOOPCOUNTER);
#define PRINTLOOPS cout<<LOOPCOUNTER-loopi;
#define PRINTALLLOOPS cout<<LOOPCOUNTER<<endl;

#endif#endif

и это сообщение об ошибке:

1>linkedlistc.obj : error LNK2005: "int loopi" (?loopi@@3HA) already defined in arraylistc.obj
1>linkedlistc.obj : error LNK2005: "int LOOPCOUNTER" (?LOOPCOUNTER@@3HA) already defined in arraylistc.obj
1>main.obj : error LNK2005: "int loopi" (?loopi@@3HA) already defined in arraylistc.obj
1>main.obj : error LNK2005: "int LOOPCOUNTER" (?LOOPCOUNTER@@3HA) already defined in arraylistc.obj
1>C:\Users\Eko\Documents\Visual Studio 2010\Projects\mt1\Debug\mt1.exe : fatal error LNK1169: one or more multiply defined symbols found
1>

0

Решение

Я думаю, что заголовочный файл должен иметь только объявления переменных. Вы должны поместить определения в соответствующий файл cpp.
Что-то вроде этого:

// header file
#ifndef _UTIL_H_
#define _UTIL_H_

extern int LOOPCOUNTER;

#endif

// cpp file
// ...
int LOOPCOUNTER = 0;
2

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

Предполагая, что вы получаете жалобы компоновщика на символы, ваша проблема, вероятно, состоит в том, что ваши заголовки включаются несколько раз. Вы не должны допустить, чтобы это произошло.

Типичное решение состоит в том, чтобы использовать защиту включения как это:

#ifndnef MYHEADER_H
#define MYHEADER_H

//header code here

#endif

Это обеспечит включение вашего заголовка только один раз.

Кроме того, вы никогда не должны #include файлы cpp, только заголовки.

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

0

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