2013-09-30 5 views
0
namespace n1 { 
    namespace n2 { 
    ... 
    int myfunc(void) 
     { 
     return 1; 
     } 
    class myclass { 
     .. 
    }; 
    } 
} 

Я думал, что можно определить функцию таким образом и получить к ней доступ как от «myclass», так и от его производных. Однако GCC даже не хочет, чтобы скомпилировать этот код:определить функцию в пространстве имен

multiple definition of `n1::n2::myfunc()' 

Эта функция является только один здесь, что мне не хватает? Спасибо.

+2

Это в файле заголовка? Если это так, он будет определяться в каждом файле .cpp, который включает его. Вы должны сделать объявление в файле .h и определение в одном конкретном файле .cpp. – nneonneo

ответ

9

Вам необходимо либо пометить функцию inline, чтобы избежать нарушения одного правила определения, либо поместить реализацию в файл .cpp и оставить только объявление в заголовке.

Смежные вопросы