Проблема, с которой я столкнулся, в основном та же, что упоминается в «greentype»
http://www.cplusplus.com/forum/beginner/12458/
Я делюсь переменными через пространства имен, и возникает проблема, когда я пытаюсь поместить определения своих функций в отдельный файл.
Рассмотрим следующий пример, где я хочу передать переменную 'i', определенную
в основном коде функции a ():
* nn.h: *
#ifndef _NN_H_
#define _NN_H_
namespace nn {
int i;
}
#endif
* main.cpp *
#include <iostream>
#include "nn.h"
using namespace std;
using namespace nn;
void a();
int main()
{
i=5;
a();
}
void a()
{
using namespace std;
using namespace nn;
i++;
cout << "i = " << i << endl;
}
Но теперь, если я помещу определение () в отдельный файл ...
* a.cpp *
#include <iostream>
#include "nn.h"
void a()
{
using namespace std;
using namespace nn;
i++;
cout << "i = " << i << endl;
}
... тогда я получаю ошибку 'множественное определение' при линковке (g ++ main.cpp
a.cpp -o main). Если я сделаю объявление 'i' в заголовочном файле 'extern' (как
предлагается на других форумах), я получаю ошибку «неопределенная ссылка». Я могу скомпилировать, когда 'i' объявлено как const в заголовке, но это не то, что я хочу.
Любые предложения с благодарностью.