У меня есть пространство имен, которое я сейчас использую в двух классах. Когда я пытаюсь скомпилировать свой проект, я получаю эту ошибку, но мое пространство имен не является анонимным!
Один из моих классов выглядит так:
//margin.cpp
#include <math.h>
#include "margin.h"
#include "anotherClass.h"
#include "specificMath.nsp.h" //My namespace
double margin::doSomeMath(double a, double b){
return specificMath::math_function1(0, 1, 0);
// Just a simpler, random example
}
Мое пространство имен выглядит так:
//specificMath.nsp.h
#ifndef specificMath
#define specificMath
namespace specificMath {
double math_function1(double, double, double);
double math_function1(double);
//more functions
}
//specificMath.nsp.cpp
#include <stdlib.h>
#include "constants.h"
#include "specificMath.nsp.h"
namespace specificMath{
double math_function1(double a, double b, double c){
//some code
}
... more functions
}
Когда я пытаюсь скомпилировать, кажется, что он компилируется нормально, но при компоновке (и я делал "make clean", чтобы убедиться, что он использует новые файлы), я получаю сообщение об ошибке:
margin.o: In function `margin::doSomeMath(double, double)':
margin.cpp:(.text+0x3d): undefined reference to `(anonymous namespace)::math_function1(double, double, double)'
Почему он думает, что это анонимное пространство имен? Как я могу это исправить?
Я компилирую, делая это:
g++ -I. -c -w *.h *.cpp
А потом ...
g++ -o myProgram *.o